diff --git a/eeschema/eeschema_id.h b/eeschema/eeschema_id.h
index b8948320d8..8646173317 100644
--- a/eeschema/eeschema_id.h
+++ b/eeschema/eeschema_id.h
@@ -95,17 +95,18 @@ enum id_eeschema_frm
ID_POPUP_START_RANGE,
ID_POPUP_SCH_DELETE,
ID_POPUP_SCH_BREAK_WIRE,
+ ID_POPUP_SCH_BEGIN_WIRE,
+ ID_POPUP_SCH_BEGIN_BUS,
+ ID_POPUP_END_LINE,
ID_POPUP_SCH_DELETE_CONNECTION,
ID_POPUP_SCH_DELETE_NODE,
ID_POPUP_SCH_DELETE_CMP,
- ID_POPUP_SCH_UNUSED_2,
ID_POPUP_SCH_ENTRY_SELECT_SLASH,
ID_POPUP_SCH_ENTRY_SELECT_ANTISLASH,
ID_POPUP_SCH_INIT_CMP,
ID_POPUP_SCH_SET_SHAPE_TEXT,
- ID_POPUP_END_LINE,
ID_POPUP_SCH_END_SHEET,
ID_POPUP_SCH_RESIZE_SHEET,
ID_POPUP_SCH_CLEANUP_SHEET,
diff --git a/eeschema/hotkeys.cpp b/eeschema/hotkeys.cpp
index 274d1631dd..28cde8f179 100644
--- a/eeschema/hotkeys.cpp
+++ b/eeschema/hotkeys.cpp
@@ -130,14 +130,17 @@ static EDA_HOTKEY HkRedo( wxT( "Redo" ), HK_REDO, GR_KB_SHIFT + GR_KB_CTRL + 'Z'
#endif
// Schematic editor
+static EDA_HOTKEY HkBeginWire( wxT( "Begin Wire" ), HK_BEGIN_WIRE, 'W', ID_WIRE_BUTT );
+static EDA_HOTKEY HkBeginBus( wxT( "Begin Bus" ), HK_BEGIN_BUS, 'B', ID_BUS_BUTT );
+static EDA_HOTKEY HkEndLineWireBus( wxT( "End Line Wire Bus" ), HK_END_CURR_LINEWIREBUS, 'K',
+ ID_POPUP_END_LINE );
+
static EDA_HOTKEY HkAddLabel( wxT( "Add Label" ), HK_ADD_LABEL, 'L', ID_LABEL_BUTT );
static EDA_HOTKEY HkAddHierarchicalLabel( wxT( "Add Hierarchical Label" ), HK_ADD_HLABEL, 'H',
ID_HIERLABEL_BUTT );
static EDA_HOTKEY HkAddGlobalLabel( wxT( "Add Global Label" ), HK_ADD_GLABEL, GR_KB_CTRL + 'L',
ID_GLABEL_BUTT );
static EDA_HOTKEY HkAddJunction( wxT( "Add Junction" ), HK_ADD_JUNCTION, 'J', ID_JUNCTION_BUTT );
-static EDA_HOTKEY HkBeginWire( wxT( "Draw Wire" ), HK_BEGIN_WIRE, 'W', ID_WIRE_BUTT );
-static EDA_HOTKEY HkBeginBus( wxT( "Draw Bus" ), HK_BEGIN_BUS, 'B', ID_BUS_BUTT );
static EDA_HOTKEY HkAddComponent( wxT( "Add Component" ), HK_ADD_NEW_COMPONENT, 'A',
ID_SCH_PLACE_COMPONENT );
static EDA_HOTKEY HkAddPower( wxT( "Add Power" ), HK_ADD_NEW_POWER, 'P',
@@ -240,6 +243,7 @@ EDA_HOTKEY* s_Schematic_Hotkey_List[] =
&HkEditComponentFootprint,
&HkBeginWire,
&HkBeginBus,
+ &HkEndLineWireBus,
&HkAddLabel,
&HkAddHierarchicalLabel,
&HkAddGlobalLabel,
@@ -373,13 +377,21 @@ void SCH_EDIT_FRAME::OnHotKey( wxDC* aDC, int aHotKey, const wxPoint& aPosition,
case HK_DELETE:
if( notBusy )
DeleteItemAtCrossHair( aDC );
-
break;
case HK_REPEAT_LAST:
if( notBusy && m_itemToRepeat && ( m_itemToRepeat->GetFlags() == 0 ) )
RepeatDrawItem( aDC );
+ break;
+ case HK_END_CURR_LINEWIREBUS:
+ // this key terminates a new line/bus/wire in progress
+ if( aItem && aItem->IsNew() &&
+ aItem->Type() == SCH_LINE_T )
+ {
+ cmd.SetId( hotKey->m_IdMenuEvent );
+ GetEventHandler()->ProcessEvent( cmd );
+ }
break;
case HK_UNDO:
@@ -390,7 +402,6 @@ void SCH_EDIT_FRAME::OnHotKey( wxDC* aDC, int aHotKey, const wxPoint& aPosition,
cmd.SetId( hotKey->m_IdMenuEvent );
GetEventHandler()->ProcessEvent( cmd );
}
-
break;
case HK_FIND_NEXT_ITEM:
diff --git a/eeschema/hotkeys.h b/eeschema/hotkeys.h
index 2e7147b76b..966b085ede 100644
--- a/eeschema/hotkeys.h
+++ b/eeschema/hotkeys.h
@@ -34,6 +34,7 @@ enum hotkey_id_commnand {
HK_ADD_NEW_POWER,
HK_BEGIN_WIRE,
HK_BEGIN_BUS,
+ HK_END_CURR_LINEWIREBUS,
HK_ADD_WIRE_ENTRY,
HK_ADD_BUS_ENTRY,
HK_ADD_LABEL,
diff --git a/eeschema/onrightclick.cpp b/eeschema/onrightclick.cpp
index 49bf5b374a..791561ab7a 100644
--- a/eeschema/onrightclick.cpp
+++ b/eeschema/onrightclick.cpp
@@ -99,7 +99,8 @@ bool SCH_EDIT_FRAME::OnRightClick( const wxPoint& aPosition, wxMenu* PopMenu )
}
}
- // If Command in progress: add "cancel" and "end tool" menu
+ // If a command is in progress: add "cancel" and "end tool" menu
+ // If
if( GetToolId() != ID_NO_TOOL_SELECTED )
{
if( item && item->GetFlags() )
@@ -114,6 +115,24 @@ bool SCH_EDIT_FRAME::OnRightClick( const wxPoint& aPosition, wxMenu* PopMenu )
}
PopMenu->AppendSeparator();
+
+ switch( GetToolId() )
+ {
+ case ID_WIRE_BUTT:
+ AddMenusForWire( PopMenu, NULL, this );
+ if( item == NULL )
+ PopMenu->AppendSeparator();
+ break;
+
+ case ID_BUS_BUTT:
+ AddMenusForBus( PopMenu, NULL, this );
+ if( item == NULL )
+ PopMenu->AppendSeparator();
+ break;
+
+ default:
+ break;
+ }
}
else
{
@@ -533,14 +552,22 @@ void SCH_EDIT_FRAME::addJunctionMenuEntries( wxMenu* aMenu, SCH_JUNCTION* aJunct
void AddMenusForWire( wxMenu* PopMenu, SCH_LINE* Wire, SCH_EDIT_FRAME* frame )
{
- bool is_new = Wire->IsNew();
SCH_SCREEN* screen = frame->GetScreen();
wxPoint pos = screen->GetCrossHairPosition();
wxString msg;
+ if( Wire == NULL )
+ {
+ msg = AddHotkeyName( _( "Begin Wire" ), s_Schematic_Hokeys_Descr, HK_BEGIN_WIRE );
+ AddMenuItem( PopMenu, ID_POPUP_SCH_BEGIN_WIRE, msg, KiBitmap( add_line_xpm ) );
+ return;
+ }
+
+ bool is_new = Wire->IsNew();
if( is_new )
{
- AddMenuItem( PopMenu, ID_POPUP_END_LINE, _( "Wire End" ), KiBitmap( apply_xpm ) );
+ msg = AddHotkeyName( _( "Wire End" ), s_Schematic_Hokeys_Descr, HK_END_CURR_LINEWIREBUS );
+ AddMenuItem( PopMenu, ID_POPUP_END_LINE, msg, KiBitmap( apply_xpm ) );
return;
}
@@ -576,13 +603,21 @@ void AddMenusForWire( wxMenu* PopMenu, SCH_LINE* Wire, SCH_EDIT_FRAME* frame )
void AddMenusForBus( wxMenu* PopMenu, SCH_LINE* Bus, SCH_EDIT_FRAME* frame )
{
- bool is_new = Bus->IsNew();
wxPoint pos = frame->GetScreen()->GetCrossHairPosition();
wxString msg;
+ if( Bus == NULL )
+ {
+ msg = AddHotkeyName( _( "Begin Bus" ), s_Schematic_Hokeys_Descr, HK_BEGIN_BUS );
+ AddMenuItem( PopMenu, ID_POPUP_SCH_BEGIN_BUS, msg, KiBitmap( add_bus_xpm ) );
+ return;
+ }
+
+ bool is_new = Bus->IsNew();
if( is_new )
{
- AddMenuItem( PopMenu, ID_POPUP_END_LINE, _( "Bus End" ), KiBitmap( apply_xpm ) );
+ msg = AddHotkeyName( _( "Bus End" ), s_Schematic_Hokeys_Descr, HK_END_CURR_LINEWIREBUS );
+ AddMenuItem( PopMenu, ID_POPUP_END_LINE, msg, KiBitmap( apply_xpm ) );
return;
}
diff --git a/eeschema/schedit.cpp b/eeschema/schedit.cpp
index 6fc86aee1f..b52c3fe664 100644
--- a/eeschema/schedit.cpp
+++ b/eeschema/schedit.cpp
@@ -68,6 +68,8 @@ void SCH_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
case ID_POPUP_CANCEL_CURRENT_COMMAND:
case ID_POPUP_SCH_ENTRY_SELECT_SLASH:
case ID_POPUP_SCH_ENTRY_SELECT_ANTISLASH:
+ case ID_POPUP_SCH_BEGIN_WIRE:
+ case ID_POPUP_SCH_BEGIN_BUS:
case ID_POPUP_END_LINE:
case ID_POPUP_SCH_SET_SHAPE_TEXT:
case ID_POPUP_SCH_CLEANUP_SHEET:
@@ -161,8 +163,17 @@ void SCH_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
EndSegment( &dc );
break;
- case ID_POPUP_SCH_SET_SHAPE_TEXT:
+ case ID_POPUP_SCH_BEGIN_WIRE:
+ m_canvas->MoveCursorToCrossHair();
+ OnLeftClick( &dc, screen->GetCrossHairPosition() );
+ break;
+ case ID_POPUP_SCH_BEGIN_BUS:
+ m_canvas->MoveCursorToCrossHair();
+ OnLeftClick( &dc, screen->GetCrossHairPosition() );
+ break;
+
+ case ID_POPUP_SCH_SET_SHAPE_TEXT:
// Not used
break;
diff --git a/eeschema/schframe.cpp b/eeschema/schframe.cpp
index 826ec01283..92be307df2 100644
--- a/eeschema/schframe.cpp
+++ b/eeschema/schframe.cpp
@@ -902,6 +902,16 @@ void SCH_EDIT_FRAME::addCurrentItemToList( wxDC* aDC )
undoItem = sheet;
}
+ else if( item->Type() == SCH_FIELD_T )
+ {
+ SCH_COMPONENT* cmp = (SCH_COMPONENT*) item->GetParent();
+
+ wxCHECK_RET( (cmp != NULL) && (cmp->Type() == SCH_COMPONENT_T),
+ wxT( "Cannot place field in invalid schematic component object." ) );
+
+ undoItem = cmp;
+ }
+
if( item->IsNew() )
{
if( item->Type() == SCH_SHEET_T )
@@ -932,8 +942,18 @@ void SCH_EDIT_FRAME::addCurrentItemToList( wxDC* aDC )
}
else
{
+ // Here, item is not a basic schematic item, but an item inside
+ // a parent basic schematic item,
+ // currently: sheet pin or component field.
+ // currently, only a sheet pin can be found as new item,
+ // because new component fields have a specific handling, and do not appears here
SaveCopyInUndoList( undoItem, UR_CHANGED );
- ( (SCH_SHEET*)undoItem )->AddPin( (SCH_SHEET_PIN*) item );
+
+ if( item->Type() == SCH_SHEET_PIN_T )
+ ( (SCH_SHEET*)undoItem )->AddPin( (SCH_SHEET_PIN*) item );
+ else
+ wxLogMessage(wxT( "addCurrentItemToList: expected type = SCH_SHEET_PIN_T, actual type = %d" ),
+ item->Type() );
}
}
else
diff --git a/template/stm32f100-discovery-shield/meta/board_stm32vl_discovery.png b/template/stm32f100-discovery-shield/meta/board_stm32vl_discovery.png
new file mode 100644
index 0000000000..29087b72d7
Binary files /dev/null and b/template/stm32f100-discovery-shield/meta/board_stm32vl_discovery.png differ
diff --git a/template/stm32f100-discovery-shield/meta/info.html b/template/stm32f100-discovery-shield/meta/info.html
index 97aee6a8f5..ca0599df50 100644
--- a/template/stm32f100-discovery-shield/meta/info.html
+++ b/template/stm32f100-discovery-shield/meta/info.html
@@ -13,7 +13,8 @@ This project includes a PCB edge defined as the same size as the STM32F100 Disco
board with the connectors placed correctly to align the two boards. All IO present on the
Discovery board is connected to the project through 0.1" expansion headers.
-
+