]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/os2/listctrl.h
Try this again
[wxWidgets.git] / include / wx / os2 / listctrl.h
diff --git a/include/wx/os2/listctrl.h b/include/wx/os2/listctrl.h
new file mode 100644 (file)
index 0000000..cf8e8bf
--- /dev/null
@@ -0,0 +1,522 @@
+#ifndef _WX_LISTCTRL_H_
+#define _WX_LISTCTRL_H_
+
+#ifdef __GNUG__
+    #pragma interface "listctrl.h"
+#endif
+
+#if wxUSE_LISTCTRL
+
+#include "wx/control.h"
+#include "wx/event.h"
+#include "wx/hash.h"
+#include "wx/textctrl.h"
+
+
+class WXDLLEXPORT wxImageList;
+
+typedef int (wxCALLBACK *wxListCtrlCompare)(long lItem1, long lItem2, long lSortData);
+
+class WXDLLEXPORT wxListCtrl: public wxControl
+{
+public:
+    wxListCtrl() { Init(); }
+    wxListCtrl( wxWindow*          pParent
+               ,wxWindowID         vId = -1
+               ,const wxPoint&     rPos = wxDefaultPosition
+               ,const wxSize&      rSize = wxDefaultSize
+               ,long               lStyle = wxLC_ICON
+               ,const wxValidator& rValidator = wxDefaultValidator
+               ,const wxString&    rsName = _T("wxListCtrl"))
+    {
+        Init();
+        Create( pParent
+               ,vId
+               ,rPos
+               ,rSize
+               ,lStyle
+               ,rValidator
+               ,rsName
+              );
+    }
+    virtual ~wxListCtrl();
+
+    bool Create( wxWindow*          pParent
+                ,wxWindowID         vId = -1
+                ,const wxPoint&     rPos = wxDefaultPosition
+                ,const wxSize&      rSize = wxDefaultSize
+                ,long               lStyle = wxLC_ICON
+                ,const wxValidator& rValidator = wxDefaultValidator
+                ,const wxString&    rsName = _T("wxListCtrl")
+               );
+
+
+    // Attributes
+    ////////////////////////////////////////////////////////////////////////////
+    //
+
+    //
+    // Set the control colours
+    //
+    bool SetForegroundColour(const wxColour& rCol);
+    bool SetBackgroundColour(const wxColour& rCol);
+
+    //
+    // Information about this column
+    //
+    bool GetColumn( int nCol
+                   ,wxListItem& rItem
+                  ) const;
+    bool SetColumn( int         nCol
+                   ,wxListItem& rItem
+                  );
+
+    //
+    // Column width
+    //
+    int  GetColumnWidth(int nCol) const;
+    bool SetColumnWidth( int nCol
+                        ,int nWidth
+                       );
+
+    //
+    // Gets the number of items that can fit vertically in the
+    // visible area of the list control (list or report view)
+    // or the total number of items in the list control (icon
+    // or small icon view)
+    //
+    int GetCountPerPage(void) const;
+
+    //
+    // Gets the edit control for editing labels.
+    //
+    wxTextCtrl* GetEditControl(void) const;
+
+    //
+    // Information about the item
+    //
+    bool GetItem(wxListItem& rInfo) const;
+    bool SetItem(wxListItem& rInfo);
+
+    //
+    // Sets a string field at a particular column
+    //
+    long SetItem( long            lIndex
+                 ,int             nCol
+                 ,const wxString& rsLabel
+                 ,int             nImageId = -1
+                );
+
+    //
+    // Item state
+    //
+    int  GetItemState( long lItem
+                      ,long lStateMask
+                     ) const;
+    bool SetItemState( long lItem
+                      ,long lState
+                      ,long lStateMask
+                      );
+
+    //
+    // Sets the item image
+    //
+    bool SetItemImage( long lItem
+                      ,int  nImage
+                      ,int  lSelImage
+                     );
+
+    //
+    // Item text
+    //
+    wxString GetItemText(long lItem) const;
+    void     SetItemText( long            lItem
+                         ,const wxString& rsStr
+                        );
+
+    //
+    // Item data
+    //
+    long GetItemData(long lItem) const;
+    bool SetItemData( long lItem
+                     ,long lData
+                    );
+
+    //
+    // Gets the item rectangle
+    //
+    bool GetItemRect( long    lItem
+                     ,wxRect& rRect
+                     ,int     nCode = wxLIST_RECT_BOUNDS
+                    ) const;
+
+    //
+    // Item position
+    //
+    bool GetItemPosition( long     lItem
+                         ,wxPoint& rPos
+                        ) const;
+    bool SetItemPosition( long           lItem
+                         ,const wxPoint& rPos
+                        );
+
+    //
+    // Gets the number of items in the list control
+    //
+    int  GetItemCount(void) const;
+
+    //
+    // Gets the number of columns in the list control
+    //
+    inline int GetColumnCount(void) const { return m_nColCount; }
+
+    //
+    // Retrieves the spacing between icons in pixels.
+    // If small is TRUE, gets the spacing for the small icon
+    // view, otherwise the large icon view.
+    //
+    int  GetItemSpacing(bool bIsSmall) const;
+
+    //
+    // Foreground colour of an item.
+    //
+    wxColour GetItemTextColour(long lItem) const;
+    void     SetItemTextColour( long            lItem
+                               ,const wxColour& rCol
+                              );
+
+    //
+    // Background colour of an item.
+    //
+    wxColour GetItemBackgroundColour(long lItem ) const;
+    void     SetItemBackgroundColour( long            lItem
+                                     ,const wxColour& rCol
+                                    );
+
+    //
+    // Gets the number of selected items in the list control
+    //
+    int      GetSelectedItemCount(void) const;
+
+    //
+    // Text colour of the listview
+    //
+    wxColour GetTextColour(void) const;
+    void     SetTextColour(const wxColour& rCol);
+
+    //
+    // Gets the index of the topmost visible item when in
+    // list or report view
+    //
+    long GetTopItem(void) const;
+
+    //
+    // Add or remove a single window style
+    void SetSingleStyle( long lStyle
+                        ,bool bAdd = TRUE
+                       );
+
+    //
+    // Set the whole window style
+    //
+    void SetWindowStyleFlag(long lStyle);
+
+    //
+    // Searches for an item, starting from 'item'.
+    // item can be -1 to find the first item that matches the
+    // specified flags.
+    // Returns the item or -1 if unsuccessful.
+    long GetNextItem( long lItem
+                     ,int  nGeometry = wxLIST_NEXT_ALL
+                     ,int  lState = wxLIST_STATE_DONTCARE
+                    ) const;
+
+    //
+    // Gets one of the three image lists
+    //
+    wxImageList* GetImageList(int nWhich) const;
+
+    //
+    // Sets the image list
+    //
+    void SetImageList( wxImageList* pImageList
+                      ,int          nWhich
+                     );
+    void AssignImageList( wxImageList* pImageList
+                         ,int          nWhich
+                        );
+
+    //
+    // Returns true if it is a virtual list control
+    //
+    inline bool IsVirtual() const { return (GetWindowStyle() & wxLC_VIRTUAL) != 0; }
+
+    //
+    // Refresh items selectively (only useful for virtual list controls)
+    //
+    void RefreshItem(long lItem);
+    void RefreshItems( long lItemFrom
+                      ,long lItemTo
+                     );
+
+    //
+    // Operations
+    ////////////////////////////////////////////////////////////////////////////
+    //
+
+    //
+    // Arranges the items
+    //
+    bool Arrange(int nFlag = wxLIST_ALIGN_DEFAULT);
+
+    //
+    // Deletes an item
+    //
+    bool DeleteItem(long lItem);
+
+    //
+    // Deletes all items
+    bool DeleteAllItems(void);
+
+    //
+    // Deletes a column
+    //
+    bool DeleteColumn(int nCol);
+
+    //
+    // Deletes all columns
+    //
+    bool DeleteAllColumns(void);
+
+    //
+    // Clears items, and columns if there are any.
+    //
+    void ClearAll(void);
+
+    //
+    // Edit the label
+    //
+    wxTextCtrl* EditLabel( long         lItem
+                          ,wxClassInfo* pTextControlClass = CLASSINFO(wxTextCtrl)
+                         );
+
+    //
+    // End label editing, optionally cancelling the edit
+    //
+    bool EndEditLabel(bool bCancel);
+
+    //
+    // Ensures this item is visible
+    //
+    bool EnsureVisible(long lItem);
+
+    //
+    // Find an item whose label matches this string, starting from the item after 'start'
+    // or the beginning if 'start' is -1.
+    //
+    long FindItem( long            lStart
+                  ,const wxString& rsStr
+                  ,bool            bPartial = FALSE
+                 );
+
+    //
+    // Find an item whose data matches this data, starting from the item after 'start'
+    // or the beginning if 'start' is -1.
+    //
+    long FindItem( long lStart
+                  ,long lData
+                 );
+
+    //
+    // Find an item nearest this position in the specified direction, starting from
+    // the item after 'start' or the beginning if 'start' is -1.
+    //
+    long FindItem( long           lStart
+                  ,const wxPoint& rPoint
+                  ,int            lDirection
+                 );
+
+    //
+    // Determines which item (if any) is at the specified point,
+    // giving details in 'flags' (see wxLIST_HITTEST_... flags above)
+    //
+    long HitTest( const wxPoint& rPoint
+                 ,int&           rFlags
+                );
+
+    //
+    // Inserts an item, returning the index of the new item if successful,
+    // -1 otherwise.
+    //
+    long InsertItem(wxListItem& rInfo);
+
+    //
+    // Insert a string item
+    //
+    long InsertItem( long            lIndex
+                    ,const wxString& rsLabel
+                   );
+
+    //
+    // Insert an image item
+    //
+    long InsertItem( long lIndex
+                    ,int  nImageIndex
+                   );
+
+    //
+    // Insert an image/string item
+    //
+    long InsertItem( long            lIndex
+                    ,const wxString& rsLabel
+                    ,int             nImageIndex
+                   );
+
+    //
+    // For list view mode (only), inserts a column.
+    //
+    long InsertColumn( long        lCol
+                      ,wxListItem& rInfo
+                     );
+
+    long InsertColumn( long            lCol
+                      ,const wxString& rsHeading
+                      ,int             nFormat = wxLIST_FORMAT_LEFT
+                      ,int             lWidth = -1
+                     );
+
+    //
+    // set the number of items in a virtual list control
+    //
+    void SetItemCount(long lCount);
+
+    //
+    // Scrolls the list control. If in icon, small icon or report view mode,
+    // x specifies the number of pixels to scroll. If in list view mode, x
+    // specifies the number of columns to scroll.
+    // If in icon, small icon or list view mode, y specifies the number of pixels
+    // to scroll. If in report view mode, y specifies the number of lines to scroll.
+    //
+    bool ScrollList( int nDx
+                    ,int nDy
+                   );
+
+    // Sort items.
+
+    //
+    // fn is a function which takes 3 long arguments: item1, item2, data.
+    // item1 is the long data associated with a first item (NOT the index).
+    // item2 is the long data associated with a second item (NOT the index).
+    // data is the same value as passed to SortItems.
+    // The return value is a negative number if the first item should precede the second
+    // item, a positive number of the second item should precede the first,
+    // or zero if the two items are equivalent.
+    //
+    // data is arbitrary data to be passed to the sort function.
+    //
+    bool SortItems( wxListCtrlCompare fn
+                   ,long              lData
+                  );
+
+    //
+    // IMPLEMENTATION
+    // --------------
+    //
+    virtual bool OS2Command( WXUINT uParam
+                            ,WXWORD wId
+                           );
+    //
+    // Bring the control in sync with current m_windowStyle value
+    //
+    void UpdateStyle(void);
+
+    //
+    // Implementation: converts wxWindows style to MSW style.
+    // Can be a single style flag or a bit list.
+    // oldStyle is 'normalised' so that it doesn't contain
+    // conflicting styles.
+    //
+    long ConvertToOS2Style( long& lOldStyle
+                           ,long  lStyle
+                          ) const;
+    long ConvertArrangeToOS2Style(long lStyle);
+    long ConvertViewToOS2Style(long lStyle);
+
+    virtual MRESULT OS2WindowProc( WXUINT   uMsg
+                                  ,WXWPARAM wParam
+                                  ,WXLPARAM lParam
+                                 );
+
+    // Event handlers
+    ////////////////////////////////////////////////////////////////////////////
+    // Necessary for drawing hrules and vrules, if specified
+    void OnPaint(wxPaintEvent& rEvent);
+
+protected:
+    //
+    // common part of all ctors
+    //
+    void Init(void);
+
+    //
+    // Free memory taken by all internal data
+    //
+    void FreeAllInternalData(void);
+
+    wxTextCtrl*                     m_pTextCtrl;        // The control used for editing a label
+    wxImageList*                    m_pImageListNormal; // The image list for normal icons
+    wxImageList*                    m_pImageListSmall;  // The image list for small icons
+    wxImageList*                    m_pImageListState;  // The image list state icons (not implemented yet)
+    bool                            m_bOwnsImageListNormal;
+    bool                            m_bOwnsImageListSmall;
+    bool                            m_bOwnsImageListState;
+    long                            m_lBaseStyle;       // Basic PM style flags, for recreation purposes
+    int                             m_nColCount;        // PM doesn't have GetColumnCount so must
+                                                        // keep track of inserted/deleted columns
+
+    //
+    // TRUE if we have any internal data (user data & attributes)
+    //
+    bool                            m_bAnyInternalData;
+
+    //
+    // TRUE if we have any items with custom attributes
+    //
+    bool                            m_bHasAnyAttr;
+
+    //
+    // These functions are only used for virtual list view controls, i.e. the
+    // ones with wxLC_VIRTUAL style
+    //
+    // return the text for the given column of the given item
+    //
+    virtual wxString OnGetItemText( long lItem
+                                   ,long lColumn
+                                  ) const;
+
+    //
+    // Return the icon for the given item
+    //
+    virtual int OnGetItemImage(long lItem) const;
+
+    //
+    // Return the attribute for the item (may return NULL if none)
+    //
+    virtual wxListItemAttr* OnGetItemAttr(long lItem) const;
+
+private:
+    bool DoCreateControl( int nX
+                         ,int nY
+                         ,int nWidth
+                         ,int nHeight
+                        );
+
+    DECLARE_DYNAMIC_CLASS(wxListCtrl)
+    DECLARE_EVENT_TABLE()
+    DECLARE_NO_COPY_CLASS(wxListCtrl)
+}; // end of CLASS wxListCtrl
+
+#endif // wxUSE_LISTCTRL
+
+#endif // _WX_LISTCTRL_H_
+