X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src2%2FcreaImageIOWxTreeView.h;h=001bf26214a53c261fc6b442bfdaac288c9ce9e5;hb=00dbbc177a9b5db334393734151e820a65f65efc;hp=678c626039ccb04bd83bcb316ce4fff4b63db9a7;hpb=fcfe92562365cb738cf919d095d2f8d3608ec389;p=creaImageIO.git diff --git a/src2/creaImageIOWxTreeView.h b/src2/creaImageIOWxTreeView.h index 678c626..001bf26 100644 --- a/src2/creaImageIOWxTreeView.h +++ b/src2/creaImageIOWxTreeView.h @@ -6,8 +6,28 @@ #include #include +#include +#include +//#include +const std::string empty_string(""); namespace creaImageIO { + + //===================================================================== + /// Data stored by the list items + struct ItemData + { + ItemData() : node(0), id(-1), attr(&empty_string) {} + // The corresponding Node + tree::Node* node; + // The id ? + int id; + // The pointer on the current attribute string to sort on + const std::string* attr; + // Was the item previously selected ? + // Useful for reselecting the item after sort + bool selected; + }; /** * \ingroup View */ @@ -19,21 +39,179 @@ namespace creaImageIO { public: /// Ctor - WxTreeView(TreeHandler*, wxWindow* parent, const wxWindowID id); + WxTreeView(TreeHandler*, GimmickView*, + wxWindow* parent, const wxWindowID id); /// Virtual destructor virtual ~WxTreeView(); - /// Something like that ... - virtual void UpdateView(); + /// Updates the view of a level given the selected items of upper level + virtual void UpdateLevel( int ); + + ///Removes selected nodes on given level + virtual void RemoveSelected(std::string &i_save); + + ///Returns the last selected level + virtual unsigned int GetLastSelectedLevel(){return mLastLevel;} + + /// Callback for item selection + void OnItemSelected(wxListEvent& event); + + /// Callback for item deselection + void OnItemDeSelected(wxListEvent& event); + + /// Callback for column click + void OnColClick(wxListEvent& event); + + /// Callback when the user needs the items sorted + void OnPopupSort(wxCommandEvent& event); + ///Callback when the user need the items filtered + void OnPopupFilter(wxCommandEvent& event); + ///Callback when the user needs the item copied to the local disk + void OnLocalCopy(wxCommandEvent& event); + + ///Callback when the user needs to edit a field + void OnEditField(wxCommandEvent& event); + + ///Callback on mouse click + void OnMouseClick(wxMouseEvent& event); + + /// Displays a menu for items + void OnItemMenu(wxListEvent &event); + + /// Gets the attributes that are being shown and the ones that have been blocked on a specific level + void GetAttributes(std::vector& areShown, std::vector& notShown, int level); + + ///Sets the non visible attributes and refreshes the GUI + void SetNonVisibleAttributes(const std::vector& notShown, int level); + + ///Creates a new listctrl + void CreateCtrl(std::vector& notShown, int nlevel); + + ///Returns true if the attribute passed as a parameter is visible or not + bool IsAttributeVisible(const std::string& val, int level); + + /// Actual processing of item selection/deselection + /// Called by OnItemSelected and OnItemDeSelected + // void ProcessItem private: + /// The struct holding the data for one level + /// Holds the wx control and other data + /// such as the vector of attribute keys corresponding to the columns + struct LevelType + { + // The List Control + wxListCtrl* wxCtrl; + wxSplitterWindow* wxSplitter; + std::vector key; + // The vector of currently selected nodes of the level + std::vector Selected; + // True iff the vector Selected is up to date + bool SelectedUpToDate; + // The column used for sorting + unsigned int SortColumn; + ///Boolean that defines the direction of the sort + ///True is ascending order and false is descending + bool SortAscending; + //The vector of not shown attributes + std::vector notShownAtts; + }; + /// The vector of levels : one for each level of the tree + std::vector mLevelList; + + /// return the wxListCtrl of one level + wxListCtrl* GetCtrl(int l) { return mLevelList[l].wxCtrl; } + /// return the wxSplitter of one level + wxSplitterWindow* GetSplitter(int l) { return mLevelList[l].wxSplitter; } + //Returns the maximum number of levels + int GetNumberOfLevels(){ return mLevelList.size(); } + /// Gets the user selected data from the level passed as a parameter + /// Updates the vector if necessary + const std::vector& GetSelected(int level); + /// Set the bool SelectedUpToDate for level l + void SetSelectedUpToDate(int l, bool v) { mLevelList[l].SelectedUpToDate = v; } + /// Get the bool SelectedUpToDate for level l + bool GetSelectedUpToDate(int l) { return mLevelList[l].SelectedUpToDate; } + ///Validates the selected images + void ValidateSelectedImages(bool isSelection); + ///Gets selected filenames + void GetSelectedAsString(std::vector&s); + ///Gets the filenames of the given nodes and returns them on the given vector. Is recursive. + void GetFilenamesAsString(const std::vector& nodes, std::vector&s); + /// Gets the next nodes on the list, be it up(true) or down(false). + void GetNodes(std::vector& nodes, bool direction); + /// Updates the view of a level given the selected items of upper level + /// Recursive method + virtual void RecursiveUpdateLevel( int ); + ///Selects all the elements of a level + void SelectAll(int level); + ///UnSelects all the elements of a level + void UnSelectAll(int level); + + void OnKeyDown(wxListEvent &event); + /// Sorts the level + void SortLevel(int level); + + /// Currently Selected Column + int mColumnSelected; + ///The last selected item on the list (left click) + long mLastSelected; + + ///The last selected item on the list (right click) + long mLastRightSelected; + + ///The last selected level (by right click) + int mLastRightLevel; + ///The color map + typedef std::map ColorMap; + typedef std::pair NodeColorPair; + ColorMap mColorMap; + ///Initial color palette + std::vector mColorPalette; + + wxMenu* menu; + + wxObject* senderCtrl; + int mAscendingID; + int mDescendingID; + int mFilterID; + unsigned int mLastLevel; + + wxMenu* menuItem; + int mAnonymizingID; + int mLocalCopyID; + int mEditFieldID; + + // If set to true then OnSelectedChanged returns immediately. + // Used to do avoid useless process during multiple selections + // or sorting + bool mIgnoreSelectedChanged; + DECLARE_EVENT_TABLE() }; // EO class WxTreeView //===================================================================== - + + class RemoveAlertDlg : public wxDialog + { + public: + RemoveAlertDlg(wxWindow *parent, + wxString title, + const wxSize& size); + ~RemoveAlertDlg(); + + bool isChecked(); + + private : + void onCheck(wxCommandEvent &Event); + bool mSave; + wxCheckBox *mcheck; + + }; + + } // EO namespace creaImageIO