← Back to team overview

kicad-developers team mailing list archive

Re: [PATCH] new hotkeys window + some menu entry mistakes corrected + CONTRIBUTE file added

 

jean-pierre,
in attachment you can find the patch for the kicad version I got one
hour ago with:
bzr branch lp:kicad kicad_ft

this is what it changes:

$ bzr status
added:
  CONTRIBUTE.txt
modified:
  common/confirm.cpp
  common/hotkeys_basic.cpp
  eeschema/hotkeys.cpp
  eeschema/menubar.cpp
  gerbview/hotkeys.cpp
  include/confirm.h
  pcbnew/hotkeys.cpp


Let me know if you have any problem

Regards
Fabrizio


On Sat, Sep 3, 2011 at 8:11 PM, jean-pierre charras
<jp.charras@xxxxxxxxxx> wrote:
> Fabrizio,
> Currently, your patch seems do not use the latest bzr version, so I am
> unable to apply and test your patch.
> Can you update your working copy and rebuild your patch.
>
> Thanks
>
> --
> Jean-Pierre CHARRAS
>
=== added file 'CONTRIBUTE.txt'
--- CONTRIBUTE.txt	1970-01-01 00:00:00 +0000
+++ CONTRIBUTE.txt	2011-09-04 11:11:56 +0000
@@ -0,0 +1,44 @@
+Contribute to KiCad (under Linux)
+--------------------
+
+1) make sure you have all the dependencies of KiCad:
+	sudo apt-get install debhelper dpatch libx11-dev 
+	sudo apt-get install libglu1-mesa-dev libgl1-mesa-dev mesa-common-dev 
+	sudo apt-get install libwxbase2.8-dev libwxgtk2.8-dev libboost-dev fakeroot 
+	sudo apt-get install cmake bzr
+
+2) initialize Bazaar:
+	bzr whoami "John Doe <john.doe@xxxxxxxxx>"
+
+3) get LATEST KiCad source tree and name it, for instance, "kicad_john":
+	cd ~/
+	bzr branch lp:kicad kicad_john
+
+4) create a copy of this folder and zip it away (just in case).
+
+5) Modify/add source code.
+	cd kicad_john
+	gedit .......
+
+6) Compile:
+	cd kicad_john
+	mkdir build; cd build
+	cmake ../ -DKICAD_TESTING_VERSION=ON -DCMAKE_BUILD_TYPE=Debug
+	make -j 4				# this is for a 4 core machine
+
+7) Repeat step 5 and 6 until satisfied.
+
+8) Delete the "build" folder and create a patch:
+	cd kicad_john
+	rm -R ./build
+	bzr add .
+	bzr status
+	bzr diff  > gui_better_zoom.patch
+
+9) Send the patch file "gui_better_zoom.patch" to the KiCad developers mailing list.
+   in the subject of the e-mail include the keyword "[PATCH]".
+   in the body of the e-mail clearly explain what you have done.
+
+
+for more info see INSTALL.txt.
+

=== modified file 'common/confirm.cpp'
--- common/confirm.cpp	2011-07-06 16:40:54 +0000
+++ common/confirm.cpp	2011-09-04 11:09:26 +0000
@@ -5,6 +5,33 @@
 
 #include "fctsys.h"
 #include "common.h"
+#include "wx/wx.h"
+#include "wx/html/htmlwin.h"
+
+
+// frame class declaration for html message window
+class MyFrame : public wxFrame
+{
+public:
+    MyFrame(wxWindow* parent, const wxString& title, 
+            const wxPoint& pos, const wxSize& size, 
+            const wxString& text);
+};
+
+
+// frame constructor for html message window
+MyFrame::MyFrame(wxWindow* parent, const wxString& title, 
+                 const wxPoint& pos, const wxSize& size, 
+                 const wxString& text)
+        : wxFrame(parent, wxID_ANY, title, pos, size)
+{   
+    Centre();
+    wxHtmlWindow *m_Html;
+    m_Html = new wxHtmlWindow(this);
+    m_Html -> SetRelatedFrame(this, _("HTML : %s"));
+    //m_Html -> LoadPage(wxT("test.html")); // you could load a local html file
+    m_Html -> SetPage(text);
+}
 
 
 /* Display an error or warning message.
@@ -45,6 +72,17 @@
 }
 
 
+ /* Display a simple message window in html format. 
+ */
+void DisplayHtmlInfoMessage( wxWindow* parent, const wxString& title, 
+                             const wxString& text, const wxSize& size,
+                             int displaytime )
+{
+    MyFrame *frame = new MyFrame(parent,title, wxDefaultPosition, size, text); 
+    frame->Show(true);
+}
+
+
 bool IsOK( wxWindow* parent, const wxString& text )
 {
     int ii;

=== modified file 'common/hotkeys_basic.cpp'
--- common/hotkeys_basic.cpp	2011-09-01 12:54:34 +0000
+++ common/hotkeys_basic.cpp	2011-09-04 11:21:17 +0000
@@ -177,7 +177,7 @@
  *  aList = pointer to a Ki_HotkeyInfo list of commands
  *  aCommandId = Command Id value
  *  aIsShortCut = true to add <tab><keyname> (active shortcuts in menus)
- *                    = false to add <spaces><(keyname)>
+ *                    = false to add <spaces><keyname>
  *  Return a wxString (aTest + key name) if key found or aText without modification
  */
 wxString AddHotkeyName( const wxString& aText, Ki_HotkeyInfo** aList,
@@ -194,7 +194,7 @@
         if( aIsShortCut )
             msg << wxT( "\t" ) << keyname;
         else
-            msg << wxT( " <" ) << keyname << wxT( ">" );
+            msg << wxT( "\t" ) << keyname;
     }
 
     return msg;
@@ -207,7 +207,7 @@
  *  aList = pointer to a Ki_HotkeyInfoSectionDescriptor DescrList of commands
  *  aCommandId = Command Id value
  *  aIsShortCut = true to add <tab><keyname> (active shortcuts in menus)
- *                    = false to add <spaces><(keyname)>
+ *                    = false to add <spaces><keyname>
  * Return a wxString (aText + key name) if key found or aText without modification
  */
 wxString AddHotkeyName( const wxString&                        aText,
@@ -231,7 +231,7 @@
                 if( aIsShortCut )
                     msg << wxT( "\t" ) << keyname;
                 else
-                    msg << wxT( " <" ) << keyname << wxT( ">" );
+                    msg << wxT( "\t" ) << keyname;
 
                 break;
             }
@@ -339,8 +339,9 @@
     wxString        keyname;
     Ki_HotkeyInfo** List;
 
-    wxString        msg = _( "Current hotkey list:\n\n" );
+    wxString        msg = _( "<html><body>" );
 
+    msg += _( "<H3>Hotkeys List</H3> <table cellpadding=\"0\">");
     for( ; aDescList->m_HK_InfoList != NULL; aDescList++ )
     {
         List = aDescList->m_HK_InfoList;
@@ -348,13 +349,14 @@
         for( ; *List != NULL; List++ )
         {
             Ki_HotkeyInfo* hk_decr = *List;
-            msg    += _( "key " );
             keyname = ReturnKeyNameFromKeyCode( hk_decr->m_KeyCode );
-            msg    += keyname + wxT( ":    " ) + hk_decr->m_InfoMsg + wxT( "\n" );
+            msg    += wxT( "<tr><td>" ) + hk_decr->m_InfoMsg + wxT("</td>");
+            msg    += wxT("<td><b>&nbsp;&nbsp;") + keyname + wxT( "</b></td></tr>" );
         }
     }
 
-    DisplayInfoMessage( aFrame, msg );
+    msg += wxT("</table></html></body>");
+    DisplayHtmlInfoMessage( aFrame, _("Hotkeys List"), msg, wxSize(340, 750));
 }
 
 

=== modified file 'eeschema/hotkeys.cpp'
--- eeschema/hotkeys.cpp	2011-09-01 16:31:16 +0000
+++ eeschema/hotkeys.cpp	2011-09-04 10:58:06 +0000
@@ -87,8 +87,8 @@
 static Ki_HotkeyInfo HkZoomOut( wxT( "Zoom Out" ), HK_ZOOM_OUT, GR_KB_CTRL + '-' );
 #endif
 
-static Ki_HotkeyInfo HkHelp( wxT( "Help: this message" ), HK_HELP, '?' );
-static Ki_HotkeyInfo HkResetLocalCoord( wxT( "Reset local coord." ),
+static Ki_HotkeyInfo HkHelp( wxT( "Help (this window)" ), HK_HELP, '?' );
+static Ki_HotkeyInfo HkResetLocalCoord( wxT( "Reset Local Coordinates" ),
                                         HK_RESET_LOCAL_COORD, ' ' );
 
 /* Undo */
@@ -104,11 +104,11 @@
 
 // Schematic editor
 static Ki_HotkeyInfo HkAddLabel( wxT( "add Label" ), HK_ADD_LABEL, 'L' );
-static Ki_HotkeyInfo HkAddHierarchicalLabel( wxT( "add Hierarchical Label" ), HK_ADD_HLABEL, 'H' );
-static Ki_HotkeyInfo HkAddGlobalLabel( wxT( "add Global Label" ), HK_ADD_GLABEL, GR_KB_CTRL + 'L' );
-static Ki_HotkeyInfo HkAddJunction( wxT( "add Junction" ), HK_ADD_JUNCTION, 'J' );
-static Ki_HotkeyInfo HkBeginWire( wxT( "begin Wire" ), HK_BEGIN_WIRE, 'W' );
-static Ki_HotkeyInfo HkBeginBus( wxT( "begin Bus" ), HK_BEGIN_BUS, 'B' );
+static Ki_HotkeyInfo HkAddHierarchicalLabel( wxT( "Add Hierarchical Label" ), HK_ADD_HLABEL, 'H' );
+static Ki_HotkeyInfo HkAddGlobalLabel( wxT( "Add Global Label" ), HK_ADD_GLABEL, GR_KB_CTRL + 'L' );
+static Ki_HotkeyInfo HkAddJunction( wxT( "Add Junction" ), HK_ADD_JUNCTION, 'J' );
+static Ki_HotkeyInfo HkBeginWire( wxT( "Draw Wire" ), HK_BEGIN_WIRE, 'W' );
+static Ki_HotkeyInfo HkBeginBus( wxT( "Draw Bus" ), HK_BEGIN_BUS, 'B' );
 static Ki_HotkeyInfo HkAddComponent( wxT( "Add Component" ), HK_ADD_NEW_COMPONENT, 'A' );
 static Ki_HotkeyInfo HkAddPower( wxT( "Add Power" ), HK_ADD_NEW_POWER, 'P' );
 static Ki_HotkeyInfo HkAddNoConn( wxT( "Add NoConnected Flag" ), HK_ADD_NOCONN_FLAG, 'Q' );
@@ -139,20 +139,20 @@
 
 static Ki_HotkeyInfo HkDrag( wxT( "Drag Schematic Item" ), HK_DRAG, 'G',
                              ID_POPUP_SCH_DRAG_CMP_REQUEST );
-static Ki_HotkeyInfo HkMove2Drag( wxT( "Switch move block to drag block" ),
+static Ki_HotkeyInfo HkMove2Drag( wxT( "Move Block -> Drag Block" ),
                                   HK_MOVEBLOCK_TO_DRAGBLOCK, '\t' );
 static Ki_HotkeyInfo HkInsert( wxT( "Repeat Last Item" ), HK_REPEAT_LAST, WXK_INSERT );
 static Ki_HotkeyInfo HkDelete( wxT( "Delete Item" ), HK_DELETE, WXK_DELETE );
 
 static Ki_HotkeyInfo HkFindItem( wxT( "Find Item" ), HK_FIND_ITEM, 'F' + GR_KB_CTRL );
 static Ki_HotkeyInfo HkFindNextItem( wxT( "Find Next Item" ), HK_FIND_NEXT_ITEM, WXK_F5 );
-static Ki_HotkeyInfo HkFindNextDrcMarker( wxT( "Find next DRC marker" ), HK_FIND_NEXT_DRC_MARKER,
+static Ki_HotkeyInfo HkFindNextDrcMarker( wxT( "Find Next DRC Marker" ), HK_FIND_NEXT_DRC_MARKER,
                                           WXK_F5 + GR_KB_SHIFT );
 
 // Special keys for library editor:
 static Ki_HotkeyInfo HkCreatePin( wxT( "Create Pin" ), HK_LIBEDIT_CREATE_PIN, 'P' );
 static Ki_HotkeyInfo HkInsertPin( wxT( "Repeat Pin" ), HK_REPEAT_LAST, WXK_INSERT );
-static Ki_HotkeyInfo HkMoveLibItem( wxT( "Move Lib Item" ), HK_LIBEDIT_MOVE_GRAPHIC_ITEM, 'M' );
+static Ki_HotkeyInfo HkMoveLibItem( wxT( "Move Library Item" ), HK_LIBEDIT_MOVE_GRAPHIC_ITEM, 'M' );
 
 
 // List of common hotkey descriptors
@@ -977,7 +977,7 @@
         break;
 
     case HK_LIBEDIT_CREATE_PIN:
-        SetToolID( ID_LIBEDIT_PIN_BUTT, wxCURSOR_PENCIL, _( "Add pin" ) );
+        SetToolID( ID_LIBEDIT_PIN_BUTT, wxCURSOR_PENCIL, _( "Add Pin" ) );
         OnLeftClick( aDC, aPosition );
         break;
 

=== modified file 'eeschema/menubar.cpp'
--- eeschema/menubar.cpp	2011-09-01 12:54:34 +0000
+++ eeschema/menubar.cpp	2011-09-04 11:23:16 +0000
@@ -51,7 +51,7 @@
     AddMenuItem( fileMenu,
                  ID_LOAD_PROJECT,
                  _( "&Open\tCtrl+O" ),
-                 _( "Open an existing schematic project" ),
+                 _( "Open Existing Schematic Project" ),
                  open_document_xpm );
 
     // Open Recent submenu
@@ -67,7 +67,7 @@
     wxGetApp().m_fileHistory.AddFilesToMenu( openRecentMenu );
     AddMenuItem( fileMenu, openRecentMenu,
                  wxID_ANY, _( "Open &Recent" ),
-                 _( "Open a recent opened schematic project" ),
+                 _( "Open Recent Opened Schematic Project" ),
                  open_project_xpm );
 
     // Separator
@@ -196,7 +196,7 @@
     AddMenuItem( editMenu,
                  ID_BACKANNO_ITEMS,
                  _( "&Backannotate" ),
-                 _( "Back annotate the footprint fields" ),
+                 _( "Back Annotate Footprint Fields" ),
                  import_footprint_names_xpm );
 
     // Menu View:
@@ -258,7 +258,7 @@
                  add_component_xpm );
 
     // Power port
-    text = AddHotkeyName( _( "Power port" ), s_Schematic_Hokeys_Descr,
+    text = AddHotkeyName( _( "Power Port" ), s_Schematic_Hokeys_Descr,
                           HK_ADD_NEW_POWER, false );    // add comment, not a shortcut
     AddMenuItem( placeMenu, ID_PLACE_POWER_BUTT, text,
                  HELP_PLACE_POWERPORT,
@@ -279,21 +279,21 @@
                  add_bus_xpm );
 
     // Wire to Bus entry
-    text = AddHotkeyName( _( "Wire to bus entry" ), s_Schematic_Hokeys_Descr,
+    text = AddHotkeyName( _( "Wire to Bus Entry" ), s_Schematic_Hokeys_Descr,
                           HK_ADD_WIRE_ENTRY, false );    // add comment, not a shortcut
     AddMenuItem( placeMenu, ID_WIRETOBUS_ENTRY_BUTT, text,
                  HELP_PLACE_WIRE2BUS_ENTRY,
                  add_line2bus_xpm );
 
     // Bus to Bus entry
-    text = AddHotkeyName( _( "Bus to bus entry" ), s_Schematic_Hokeys_Descr,
+    text = AddHotkeyName( _( "Bus to Bus Entry" ), s_Schematic_Hokeys_Descr,
                           HK_ADD_BUS_ENTRY, false );    // add comment, not a shortcut
     AddMenuItem( placeMenu, ID_BUSTOBUS_ENTRY_BUTT, text,
                  HELP_PLACE_BUS2BUS_ENTRY,
                  add_bus2bus_xpm );
 
-    // No connect flag
-    text = AddHotkeyName( _( "No connect flag" ), s_Schematic_Hokeys_Descr,
+    // No Connect Flag
+    text = AddHotkeyName( _( "No Connect Flag" ), s_Schematic_Hokeys_Descr,
                           HK_ADD_NOCONN_FLAG, false );    // add comment, not a shortcut
     AddMenuItem( placeMenu, ID_NOCONN_BUTT, text, HELP_PLACE_NC_FLAG, noconn_xpm );
 
@@ -305,7 +305,7 @@
                  add_line_label_xpm );
 
     // Global label
-    text = AddHotkeyName( _( "Global label" ), s_Schematic_Hokeys_Descr,
+    text = AddHotkeyName( _( "Global Label" ), s_Schematic_Hokeys_Descr,
                           HK_ADD_GLABEL, false );    // add comment, not a shortcut
     AddMenuItem( placeMenu, ID_GLABEL_BUTT, text,
                  HELP_PLACE_GLOBALLABEL,
@@ -322,9 +322,9 @@
     placeMenu->AppendSeparator();
 
     // Hierarchical label
-    text = AddHotkeyName( _( "Hierarchical label" ), s_Schematic_Hokeys_Descr,
+    text = AddHotkeyName( _( "Hierarchical Label" ), s_Schematic_Hokeys_Descr,
                           HK_ADD_HLABEL, false );       // add comment, not a shortcut
-    text = AddHotkeyName( _( "Hierarchical label" ), s_Schematic_Hokeys_Descr,
+    text = AddHotkeyName( _( "Hierarchical Label" ), s_Schematic_Hokeys_Descr,
                           HK_ADD_HLABEL, false );       // add comment, not a shortcut
     AddMenuItem( placeMenu, ID_HIERLABEL_BUTT,
                  text, HELP_PLACE_HIER_LABEL,
@@ -332,7 +332,7 @@
 
 
     // Hierarchical sheet
-    text = AddHotkeyName( _( "Hierarchical sheet" ), s_Schematic_Hokeys_Descr,
+    text = AddHotkeyName( _( "Hierarchical Sheet" ), s_Schematic_Hokeys_Descr,
                           HK_ADD_HIER_SHEET, false );    // add comment, not a shortcut
     AddMenuItem( placeMenu, ID_SHEET_SYMBOL_BUTT, text,
                  HELP_PLACE_SHEET,
@@ -348,7 +348,7 @@
     // Add hierarchical Pin to Sheet
     AddMenuItem( placeMenu,
                  ID_SHEET_PIN_BUTT,
-                 _( "Add Hierarchical Pin to Sheet" ),
+                 _( "Hierarchical Pin to Sheet" ),
                  HELP_PLACE_SHEETPIN,
                  add_hierar_pin_xpm );
 
@@ -356,14 +356,14 @@
     placeMenu->AppendSeparator();
 
     // Graphic line or polygon
-    text = AddHotkeyName( _( "Graphic polyline" ), s_Schematic_Hokeys_Descr,
+    text = AddHotkeyName( _( "Graphic Polyline" ), s_Schematic_Hokeys_Descr,
                           HK_ADD_GRAPHIC_POLYLINE, false );    // add comment, not a shortcut
     AddMenuItem( placeMenu, ID_LINE_COMMENT_BUTT, text,
                  HELP_PLACE_GRAPHICLINES,
                  add_dashed_line_xpm );
 
     // Graphic text
-    text = AddHotkeyName( _( "Graphic text" ), s_Schematic_Hokeys_Descr,
+    text = AddHotkeyName( _( "Graphic Text" ), s_Schematic_Hokeys_Descr,
                           HK_ADD_GRAPHIC_TEXT, false );    // add comment, not a shortcut
     AddMenuItem( placeMenu, ID_TEXT_COMMENT_BUTT, text,
                  HELP_PLACE_GRAPHICTEXTS,
@@ -412,14 +412,14 @@
     // Save preferences
     AddMenuItem( preferencesMenu,
                  ID_CONFIG_SAVE,
-                 _( "&Save preferences" ),
+                 _( "&Save Preferences" ),
                  _( "Save application preferences" ),
                  save_setup_xpm );
 
     // Read preferences
     AddMenuItem( preferencesMenu,
                  ID_CONFIG_READ,
-                 _( "&Read preferences" ),
+                 _( "&Read Preferences" ),
                  _( "Read application preferences" ),
                  read_setup_xpm );
 
@@ -478,14 +478,14 @@
     //Run CVPcb
     AddMenuItem( toolsMenu,
                  ID_TO_CVPCB,
-                 _( "A&ssign component footprints" ),
+                 _( "A&ssign Component Footprints" ),
                  _( "Run CVPcb" ),
                  cvpcb_xpm );
 
     // Run PCBNew
     AddMenuItem( toolsMenu,
                  ID_TO_PCB,
-                 _( "&Layout printed circuit board" ),
+                 _( "&Layout Printed Circuit Board" ),
                  _( "Run PCBNew" ),
                  pcbnew_xpm );
 

=== modified file 'gerbview/hotkeys.cpp'
--- gerbview/hotkeys.cpp	2011-03-14 21:19:13 +0000
+++ gerbview/hotkeys.cpp	2011-09-04 10:48:38 +0000
@@ -30,13 +30,13 @@
 
 /* local variables */
 /* Hotkey list: */
-static Ki_HotkeyInfo    HkResetLocalCoord( wxT( "Reset local coord." ), HK_RESET_LOCAL_COORD, ' ' );
+static Ki_HotkeyInfo    HkResetLocalCoord( wxT( "Reset Local Coordinates" ), HK_RESET_LOCAL_COORD, ' ' );
 static Ki_HotkeyInfo    HkZoomAuto( wxT( "Zoom Auto" ), HK_ZOOM_AUTO, WXK_HOME );
 static Ki_HotkeyInfo    HkZoomCenter( wxT( "Zoom Center" ), HK_ZOOM_CENTER, WXK_F4 );
 static Ki_HotkeyInfo    HkZoomRedraw( wxT( "Zoom Redraw" ), HK_ZOOM_REDRAW, WXK_F3 );
 static Ki_HotkeyInfo    HkZoomOut( wxT( "Zoom Out" ), HK_ZOOM_OUT, WXK_F2 );
 static Ki_HotkeyInfo    HkZoomIn( wxT( "Zoom In" ), HK_ZOOM_IN, WXK_F1 );
-static Ki_HotkeyInfo    HkHelp( wxT( "Help: this message" ), HK_HELP, '?' );
+static Ki_HotkeyInfo    HkHelp( wxT( "Help (this window)" ), HK_HELP, '?' );
 static Ki_HotkeyInfo    HkSwitchUnits( wxT( "Switch Units" ), HK_SWITCH_UNITS, 'U' );
 static Ki_HotkeyInfo    HkTrackDisplayMode( wxT(
                                                 "Track Display Mode" ),

=== modified file 'include/confirm.h'
--- include/confirm.h	2010-07-20 18:11:34 +0000
+++ include/confirm.h	2011-09-04 10:47:22 +0000
@@ -16,4 +16,10 @@
 
 bool    IsOK( wxWindow* parent, const wxString& msg );
 
+void    DisplayHtmlInfoMessage( wxWindow* parent, const wxString& title, 
+                                const wxString& msg,
+                                const wxSize& size=wxDefaultSize, 
+                                int displaytime = 0 );
+
+
 #endif /* __INCLUDE__CONFIRM_H__ */

=== modified file 'pcbnew/hotkeys.cpp'
--- pcbnew/hotkeys.cpp	2011-08-30 09:42:42 +0000
+++ pcbnew/hotkeys.cpp	2011-09-04 10:46:06 +0000
@@ -82,7 +82,7 @@
 static Ki_HotkeyInfo HkLock_Unlock_Footprint( wxT( "Lock/Unlock Footprint" ),
                                               HK_LOCK_UNLOCK_FOOTPRINT, 'L' );
 static Ki_HotkeyInfo HkDelete( wxT( "Delete Track or Footprint" ), HK_DELETE, WXK_DELETE );
-static Ki_HotkeyInfo HkResetLocalCoord( wxT( "Reset local coord." ),
+static Ki_HotkeyInfo HkResetLocalCoord( wxT( "Reset Local Coordinates" ),
                                         HK_RESET_LOCAL_COORD, ' ' );
 
 /* Fit on Screen */
@@ -115,7 +115,7 @@
 static Ki_HotkeyInfo HkZoomOut( wxT( "Zoom Out" ), HK_ZOOM_OUT, GR_KB_CTRL + '-' );
 #endif
 
-static Ki_HotkeyInfo HkHelp( wxT( "Help: this message" ), HK_HELP, '?' );
+static Ki_HotkeyInfo HkHelp( wxT( "Help (this window)" ), HK_HELP, '?' );
 
 
 /* Undo */


Follow ups

References