/****************************************************/ /* drawpanel_wxstruct.h: */ /* descriptions des principales classes utilisees: */ /* ici classe: "WinEDA_DrawPanel", "BASE_SCREEN" */ /*****************************************************/ /* Doit etre inclus dans "wxstruch.h" */ #ifndef PANEL_WXSTRUCT_H #define PANEL_WXSTRUCT_H #ifndef eda_global #define eda_global extern #endif #include "colors.h" /****************************************************/ /* classe representant un ecran graphique de dessin */ /****************************************************/ class WinEDA_DrawPanel: public EDA_DRAW_PANEL { public: int m_Ident; WinEDA_DrawFrame * m_Parent; EDA_Rect m_ClipBox; /* position et taille de la fenetre de trace pour les "RePaint" d'ecran */ wxPoint m_CursorStartPos; // utile dans controles du mouvement curseur int m_Scroll_unit; // Valeur de l'unite de scroll en pixels pour les barres de scroll int m_ScrollButt_unit; // Valeur de l'unite de scroll en pixels pour les boutons de scroll bool m_AbortRequest; // Flag d'arret de commandes longues bool m_AbortEnable; // TRUE si menu ou bouton Abort doit etre affiche bool m_AutoPAN_Enable; // TRUE pour autoriser auto pan (autorisation générale) bool m_AutoPAN_Request; // TRUE pour auto pan (lorsque auto pan nécessaire) bool m_IgnoreMouseEvents; // TRUE pour ne par traiter les evenements souris bool m_Block_Enable; // TRUE pour autoriser Bloc Commandes (autorisation générale) int m_CanStartBlock; // >= 0 (ou >= n) si un bloc peut demarrer // (filtrage des commandes de debut de bloc ) int m_PanelDefaultCursor; // Current mouse cursor default shape id for this window int m_PanelCursor; // Current mouse cursor shape id for this window int m_CursorLevel; // Index for cursor redraw in XOR mode /* Cursor management (used in editing functions) */ void (*ManageCurseur)(WinEDA_DrawPanel * panel, wxDC * DC, bool erase); /* Fonction d'affichage sur deplacement souris si erase : effacement ancien affichage */ void (*ForceCloseManageCurseur)(WinEDA_DrawPanel * panel, wxDC * DC); /* Fonction de fermeture forcée de la fonction ManageCurseur */ public: // Constructor and destructor WinEDA_DrawPanel(WinEDA_DrawFrame *parent, int id, const wxPoint& pos, const wxSize& size); ~WinEDA_DrawPanel(void){} /****************************/ BASE_SCREEN * GetScreen(void) { return m_Parent->m_CurrentScreen; } void PrepareGraphicContext(wxDC * DC); wxPoint CalcAbsolutePosition(const wxPoint & rel_pos); bool IsPointOnDisplay(wxPoint ref_pos); void OnPaint(wxPaintEvent & event); void OnSize(wxSizeEvent & event); void SetBoundaryBox(void); void ReDraw(wxDC * DC, bool erasebg = TRUE); void PrintPage(wxDC * DC, bool Print_Sheet_Ref, int PrintMask); void DrawBackGround(wxDC * DC); void m_Draw_Auxiliary_Axis(wxDC * DC, int drawmode); void OnEraseBackground(wxEraseEvent& event); void OnActivate(wxActivateEvent& event); /* Mouse and keys events */ void OnMouseEvent(wxMouseEvent& event); void OnMouseLeaving(wxMouseEvent& event); void OnKeyEvent(wxKeyEvent& event); /*************************/ void EraseScreen(wxDC * DC); void OnScrollWin( wxCommandEvent &event ); void OnScroll( wxScrollWinEvent &event ); void SetZoom(int mode); int GetZoom(void); void SetGrid(const wxSize & size); wxSize GetGrid(void); void AddMenuZoom( wxMenu * MasterMenu ); void OnRightClick(wxMouseEvent& event); void Process_Popup_Zoom( wxCommandEvent &event ); void Process_Special_Functions(wxCommandEvent& event); wxPoint CursorRealPosition(const wxPoint & ScreenPos); wxPoint CursorScreenPosition(void); wxPoint GetScreenCenterRealPosition(void); void MouseToCursorSchema(void); void MouseTo(const wxPoint & Mouse); /* Cursor functions */ void Trace_Curseur(wxDC * DC, int color = WHITE); // Draw the user cursor (grid cursor) void CursorOff(wxDC * DC); // remove the grid cursor from the display void CursorOn(wxDC * DC); // display the grid cursor DECLARE_EVENT_TABLE() }; /**************************/ /* class DrawBlockStruct */ /**************************/ /* Definition d'un block pour les fonctions sur block (block move, ..) */ typedef enum { /* definition de l'etat du block */ STATE_NO_BLOCK, /* Block non initialise */ STATE_BLOCK_INIT, /* Block initialise: 1er point defini */ STATE_BLOCK_END, /* Block initialise: 2eme point defini */ STATE_BLOCK_MOVE, /* Block en deplacement */ STATE_BLOCK_STOP /* Block fixe (fin de deplacement) */ } BlockState; /* codes des differentes commandes sur block: */ typedef enum { BLOCK_IDLE, BLOCK_MOVE, BLOCK_COPY, BLOCK_SAVE, BLOCK_DELETE, BLOCK_PASTE, BLOCK_DRAG, BLOCK_ROTATE, BLOCK_INVERT, BLOCK_ZOOM, BLOCK_ABORT, BLOCK_PRESELECT_MOVE, BLOCK_SELECT_ITEMS_ONLY, BLOCK_MIRROR_X, BLOCK_MIRROR_Y } CmdBlockType; class DrawBlockStruct: public EDA_BaseStruct, public EDA_Rect { public: BlockState m_State; /* Etat (enum BlockState) du block */ CmdBlockType m_Command; /* Type (enum CmdBlockType) d'operation */ EDA_BaseStruct *m_BlockDrawStruct; /* pointeur sur la structure selectionnee dans le bloc */ int m_Color; /* Block Color */ wxPoint m_MoveVector; /* Move distance in move, drag, copy ... command */ wxPoint m_BlockLastCursorPosition; /* Last Mouse position in block command = last cursor position in move commands = 0,0 in block paste */ public: DrawBlockStruct(void); ~DrawBlockStruct(void); void SetMessageBlock(WinEDA_DrawFrame * frame); void Draw(WinEDA_DrawPanel * panel, wxDC * DC); }; /*******************************************************************/ /* Class to handle how to draw a screen (a board, a schematic ...) */ /*******************************************************************/ class BASE_SCREEN: public EDA_BaseStruct { public: int m_Type; /* indicateur: type d'ecran */ wxPoint m_DrawOrg; /* offsets pour tracer le circuit sur l'ecran */ wxPoint m_Curseur; /* Screen cursor coordinate (on grid) in user units. */ wxPoint m_MousePosition; /* Mouse cursor coordinate (off grid) in user units. */ wxPoint m_MousePositionInPixels; /* Mouse cursor coordinate (off grid) in pixels. */ wxPoint m_O_Curseur; /* Relative Screen cursor coordinate (on grid) in user units. (coordinates from last reset position)*/ wxPoint m_ScrollbarPos; // Position effective des Curseurs de scroll wxSize m_ScrollbarNumber; /* Valeur effective des Nombres de Scrool c.a.d taille en unites de scroll de la surface totale affichable */ wxPoint m_StartVisu; // Coord absolues du 1er pixel visualisé a l'ecran (en nombre de pixels) wxSize m_SizeVisu; /* taille en pixels de l'ecran (fenetre de visu Utile pour recadrer les affichages lors de la navigation dans la hierarchie */ bool m_Center; // TRUE: coord algebriques, FALSE: coord >= 0 bool m_FirstRedraw; /* Gestion des editions */ EDA_BaseStruct *EEDrawList; /* Object list (main data) for schematic */ EDA_BaseStruct * m_UndoList; /* Object list for the undo command (old data) */ EDA_BaseStruct * m_RedoList; /* Object list for the redo command (old data) */ int m_UndoRedoCountMax; /* undo/Redo command Max depth */ EDA_BaseStruct * m_CurrentItem; /* Current selected object */ /* block control */ DrawBlockStruct BlockLocate; /* Bock description for block commands */ /* Page description */ Ki_PageDescr * m_CurrentSheet; int m_SheetNumber, m_NumberOfSheet; /* gestion hierarchie: numero de sousfeuille et nombre de feuilles. Root: SheetNumber = 1 */ wxString m_FileName; wxString m_Title; /* titre de la feuille */ wxString m_Date; /* date de mise a jour */ wxString m_Revision; /* code de revision */ wxString m_Company; /* nom du proprietaire */ wxString m_Commentaire1; wxString m_Commentaire2; wxString m_Commentaire3; wxString m_Commentaire4; private: /* indicateurs divers */ char m_FlagRefreshReq; /* indique que l'ecran doit redessine */ char m_FlagModified; // indique modif du PCB,utilise pour eviter une sortie sans sauvegarde char m_FlagSave; // indique sauvegarde auto faite /* Valeurs du pas de grille et du zoom */ public: wxSize m_Grid ; /* pas de la grille (peut differer en X et Y) */ wxSize * m_GridList; /* Liste des valeurs standard de grille */ wxRealPoint m_UserGrid; /* pas de la grille utilisateur */ int m_UserGridUnit; /* unité grille utilisateur (0 = inch, 1 = mm */ int m_Diviseur_Grille ; bool m_UserGridIsON; int * m_ZoomList; /* Liste des coefficients standard de zoom */ int m_Zoom ; /* coeff de ZOOM */ public: BASE_SCREEN(int idscreen); ~BASE_SCREEN(void); void InitDatas(void); /* Inits completes des variables */ wxSize ReturnPageSize(void); int GetInternalUnits(void); wxPoint CursorRealPosition(const wxPoint & ScreenPos); /* general Undo/Redo command control */ virtual void ClearUndoRedoList(void); virtual void AddItemToUndoList(EDA_BaseStruct * item); virtual void AddItemToRedoList(EDA_BaseStruct * item); virtual EDA_BaseStruct * GetItemFromUndoList(void); virtual EDA_BaseStruct * GetItemFromRedoList(void); /* Manipulation des flags */ void SetRefreshReq(void) { m_FlagRefreshReq = 1; } void ClrRefreshReq(void) { m_FlagRefreshReq = 0; } void SetModify(void) { m_FlagModified = 1; m_FlagSave = 0; } void ClrModify(void) { m_FlagModified = 0; m_FlagSave = 1; } void SetSave(void) { m_FlagSave = 1; } void ClrSave(void) { m_FlagSave = 0; } int IsModify(void) { return (m_FlagModified & 1); } int IsRefreshReq(void) { return (m_FlagRefreshReq & 1); } int IsSave(void) { return (m_FlagSave & 1); } /* fonctions relatives au zoom */ int GetZoom(void); /* retourne le coeff de zoom */ void SetZoom(int coeff) ; /* ajuste le coeff de zoom a coeff */ void SetZoomList(int * zoomlist); /* init liste des zoom (NULL terminated) */ void SetNextZoom(void); /* ajuste le prochain coeff de zoom */ void SetPreviousZoom(void); /* ajuste le precedent coeff de zoom */ void SetFirstZoom(void); /* ajuste le coeff de zoom a 1*/ void SetLastZoom(void); /* ajuste le coeff de zoom au max */ /* fonctions relatives a la grille */ wxSize GetGrid(void); /* retourne la grille */ void SetGrid(const wxSize & size); void SetGridList(wxSize * sizelist); /* init liste des grilles (NULL terminated) */ void SetNextGrid(void); /* ajuste le prochain coeff de grille */ void SetPreviousGrid(void); /* ajuste le precedent coeff de grille */ void SetFirstGrid(void); /* ajuste la grille au mini*/ void SetLastGrid(void); /* ajuste la grille au max */ }; #endif /* PANEL_WXSTRUCT_H */