#include <wx/gdicmn.h>
#include <boost/date_time/gregorian/gregorian.hpp>
-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;
- };
+
//=====================================================================
}
//=====================================================================
{
GimmickDebugMessage(1,"WxTreeView::~WxTreeView"
<<std::endl);
+ delete menu;
+ delete menuItem;
+
}
//=====================================================================
//=====================================================================
const std::vector<tree::Node*>& WxTreeView::GetSelected(int level)
{
+ std::vector<tree::Node*>& sel = mLevelList[0].Selected;
// if (GetSelectedUpToDate(level))
int l = level - 1;
// the selection of upper level
- std::vector<tree::Node*>& sel(mLevelList[l].Selected);
- sel.clear();
+ if(mLevelList.size() == level -1)
+ sel = mLevelList.back().Selected;
+ else
+ sel= mLevelList[l].Selected;
+ if (sel.size() > 0)
+ {
+ sel.clear();
+ }
if (level == 1)
{
sel.push_back(GetTreeHandler()->GetTree().GetTree());
//=====================================================================
///Removes selected nodes on last selected level
// NOT SPECIFIC
- void WxTreeView::RemoveSelected()
+ void WxTreeView::RemoveSelected(std::string &i_save)
{
- unsigned int tempLevel = mLastLevel;
+ bool erase=false;
+
+ unsigned int tempLevel = mLastLevel;
mLastLevel+=1;
const std::vector<tree::Node*>& sel=GetSelected(mLastLevel+1);
// if no selection, no remove action.
if(sel.size() != 0)
{
- bool erase=false;
+
std::stringstream out;
std::string levelName=GetTreeHandler()->GetTree().GetLevelDescriptor(mLastLevel).GetName();
out<<"Delete ";
{
needRefresh=true;
}
- tree::Node* n= (tree::Node*)(*i);
+ //tree::Node* n = new (tree::Node*)(*i);
GetTreeHandler()->LoadChildren((*i),4);
- GetGimmickView()->AddIgnoreFile(n);
+ GetGimmickView()->AddIgnoreFile(*i);
GetTreeHandler()->Remove(*i);
}
mLastLevel = tempLevel;
}
+ if (erase && mLastLevel == 1 && i_save == "0")
+ {
+
+ RemoveAlertDlg *dial = new RemoveAlertDlg(this, crea::std2wx("Remove files"), wxSize(370,100));
+ //dial->ShowModal();
+ if (dial->ShowModal() == wxID_OK)
+ {
+ i_save = dial->isChecked() == false? "0" : "1";
+ }
+
+ }
}
wxLIST_MASK_FORMAT
);
- ItemData* data = new ItemData;
+ ItemData* data = new ItemData();
data->node = *j;
data->id = _id;
-
+
item.SetId(_id);
item.SetData(data);
-
+
_id++;
GetCtrl(l)->InsertItem(item);
}
else
{
-
+ if (val.size()==0) val = "?";
}
- if (val.size()==0) val = "?";
+ if (val.size()==0) val = "X";
item.SetText( crea::std2wx(val));
item.SetColumn(k);
- GetCtrl(l)->SetItem(item);
- }
+
+ GetCtrl(l)->SetItem(item);
+ }
+ item.Clear();
}
}
GetGimmickView()->ClearSelection();
}
// Select all images if the selection is at series level
- if (level==mLevelList.size()-2) SelectAll(level+1);
+ if (level==mLevelList.size()-2)
+ SelectAll(level+1);
// Validate selected images if the selection is at image level
if (level==(mLevelList.size()-1)) //&&mProcess)
{
mIgnoreSelectedChanged = true;// mProcess=false;
}
GetCtrl(level)->SetItemState(item,wxLIST_STATE_SELECTED, wxLIST_MASK_STATE
- | wxLIST_MASK_TEXT |wxLIST_MASK_IMAGE | wxLIST_MASK_DATA | wxLIST_MASK_WIDTH | wxLIST_MASK_FORMAT);
+ | wxLIST_MASK_TEXT |wxLIST_MASK_IMAGE | wxLIST_MASK_DATA | wxLIST_MASK_WIDTH | wxLIST_MASK_FORMAT);
}
}
if(event.GetKeyCode() == WXK_DELETE)
{
wxBusyCursor busy;
-
- RemoveSelected();
+ std::string temp = "0";
+ RemoveSelected(temp);
GetGimmickView()->ClearSelection();
}
}
//================================================================
- void WxTreeView::SetColor(int l, int item)
+
+ //================================================================
+ void WxTreeView::GetAttributes(std::vector<std::string>& areShown, std::vector<std::string>& notShown, int level)
{
- int colorId=12;
- GetCtrl(l)->SetItemTextColour(item, wxColourDatabase().Find
- (crea::std2wx(mColorPalette[colorId])));
- GetCtrl(l)->SetItemState(item,wxLIST_STATE_SELECTED | wxLIST_STATE_FOCUSED, wxLIST_STATE_SELECTED); /*
- int colorId=0;
- //Setting the color according to the parent
- if(l==0)
- {
- item.SetBackgroundColour
- (wxColourDatabase().Find
- (crea::std2wx(mColorPalette[colorId])));
- mColorMap.insert
- (NodeColorPair
- (*j,wxColourDatabase().Find
- (crea::std2wx(mColorPalette[colorId]))));
- if(colorId<64)
- {
- colorId++;
- }
- else
- {
- colorId=0;
- }
- }
- else if(l!=mLevelList.size()-1)
- {
- item.SetBackgroundColour(mColorMap[*i]);
- mColorMap.insert(NodeColorPair(*j,mColorMap[*i]));
+ areShown.clear();
+ notShown.clear();
+ tree::LevelDescriptor::AttributeDescriptorListType::const_iterator a;
+ for (a = GetTreeHandler()->GetTree().GetAttributeDescriptorList(level).begin();
+ a != GetTreeHandler()->GetTree().GetAttributeDescriptorList(level).end();
+ ++a)
+ {
+ if(a->GetFlags()==creaImageIO::tree::AttributeDescriptor::EDITABLE && IsAttributeVisible(a->GetName(),level))
+ {
+ areShown.push_back(a->GetName());
}
- else
- {
- item.SetBackgroundColour(mColorMap[*i]);
- }*/
+ }
+ notShown=mLevelList[level-1].notShownAtts;
+ }
+
+ //================================================================
+ void WxTreeView::SetNonVisibleAttributes(const std::vector<std::string>& notShown, int nlevel)
+ {
+ mLevelList[nlevel].notShownAtts=notShown;
}
+
//================================================================
- void WxTreeView::CreateColorPalette()
+ void WxTreeView::CreateCtrl(std::vector<std::string>& notShown, int nlevel)
{
- GimmickDebugMessage(6,"WxTreeView::CreateColorPalette");
- mColorPalette.push_back("WHITE");
- mColorPalette.push_back("LIGHT GREY");
- mColorPalette.push_back("AQUAMARINE");
- mColorPalette.push_back("MEDIUM FOREST GREEN");
- mColorPalette.push_back("INDIAN RED");
- mColorPalette.push_back("KHAKI");
- mColorPalette.push_back("ORANGE");
- mColorPalette.push_back("LIGHT BLUE");
- mColorPalette.push_back("LIGHT STEEL BLUE");
- mColorPalette.push_back("PINK");
- mColorPalette.push_back("PLUM");
- mColorPalette.push_back("PURPLE");
- mColorPalette.push_back("RED");
- mColorPalette.push_back("SEA GREEN");
- mColorPalette.push_back("SIENNA");
- mColorPalette.push_back("SKY BLUE");
- mColorPalette.push_back("SLATE BLUE");
- mColorPalette.push_back("SPRING GREEN");
- mColorPalette.push_back("TAN");
- mColorPalette.push_back("THISTLE");
- mColorPalette.push_back("TURQUOISE");
- mColorPalette.push_back("VIOLET");
- mColorPalette.push_back("VIOLET RED");
- mColorPalette.push_back("WHEAT");
- mColorPalette.push_back("YELLOW");
- mColorPalette.push_back("YELLOW GREEN");
- mColorPalette.push_back("BLUE");
- mColorPalette.push_back("BLUE VIOLET");
- mColorPalette.push_back("BROWN");
- mColorPalette.push_back("CADET BLUE");
- mColorPalette.push_back("CORAL");
- mColorPalette.push_back("CORNFLOWER BLUE");
- mColorPalette.push_back("CYAN");
- mColorPalette.push_back("DARK GREY");
- mColorPalette.push_back("DARK GREEN");
- mColorPalette.push_back("DARK OLIVE GREEN");
- mColorPalette.push_back("DARK ORCHID");
- mColorPalette.push_back("DARK SLATE BLUE");
- mColorPalette.push_back("DARK SLATE GREY");
- mColorPalette.push_back("DARK TURQUOISE");
- mColorPalette.push_back("FIREBRICK");
- mColorPalette.push_back("FOREST GREEN");
- mColorPalette.push_back("GOLD");
- mColorPalette.push_back("GOLDENROD");
- mColorPalette.push_back("GREY");
- mColorPalette.push_back("GREEN");
- mColorPalette.push_back("GREEN YELLOW");
- mColorPalette.push_back("LIME GREEN");
- mColorPalette.push_back("MAGENTA");
- mColorPalette.push_back("MAROON");
- mColorPalette.push_back("MEDIUM AQUAMARINE");
- mColorPalette.push_back("MEDIUM BLUE");
- mColorPalette.push_back("MEDIUM GOLDENROD");
- mColorPalette.push_back("MEDIUM ORCHID");
- mColorPalette.push_back("MEDIUM SEA GREEN");
- mColorPalette.push_back("MEDIUM SLATE BLUE");
- mColorPalette.push_back("MEDIUM SPRING GREEN");
- mColorPalette.push_back("MEDIUM TURQUOISE");
- mColorPalette.push_back("MEDIUM VIOLET RED");
- mColorPalette.push_back("MIDNIGHT BLUE");
- mColorPalette.push_back("NAVY");
- mColorPalette.push_back("ORANGE RED");
- mColorPalette.push_back("ORCHID, PALE GREEN");
- mColorPalette.push_back("STEEL BLUE");
- mColorPalette.push_back("BLACK");
+ int ctrl_style = wxLC_REPORT | wxLC_VRULES;
+ int col_style = wxLIST_FORMAT_LEFT;
+ LevelType level;
+ mLevelList[nlevel].SelectedUpToDate = true;
+ mLevelList[nlevel].SortColumn = 0;
+ mLevelList[nlevel].key.clear();
+
+ mLevelList[nlevel].wxCtrl = new wxListCtrl(mLevelList[nlevel].wxSplitter,
+ nlevel,
+ wxDefaultPosition,
+ wxDefaultSize,
+ ctrl_style);
+ wxWindow* oldWin=mLevelList[nlevel].wxSplitter->GetWindow1();
+ mLevelList[nlevel].wxSplitter->ReplaceWindow(oldWin,mLevelList[nlevel].wxCtrl);
+ mLevelList[nlevel].wxSplitter->Initialize(mLevelList[nlevel].wxCtrl);
+
+ // Create the columns : one for each attribute of the level
+ int col = 0;
+ std::string title;
+ tree::LevelDescriptor::AttributeDescriptorListType::const_iterator a;
+ for (a = GetTreeHandler()->GetTree().GetAttributeDescriptorList(nlevel+1).begin();
+ a != GetTreeHandler()->GetTree().GetAttributeDescriptorList(nlevel+1).end();
+ ++a)
+ {
+ if(a->GetFlags()!=creaImageIO::tree::AttributeDescriptor::PRIVATE && IsAttributeVisible(a->GetName(),nlevel+1))
+ {
+ title=a->GetName();
+ std::string temp = a->GetKey();
+ if (temp.compare("ID") != 0)
+ {
+ mLevelList[nlevel].wxCtrl->InsertColumn(col,
+ crea::std2wx(title),
+ col_style);
+ col++;
+ }
+ mLevelList[nlevel].key.push_back(a->GetKey());
+ }
+
+ }
+ oldWin->Destroy();
+ UpdateLevel(1);
+ }
+
+ //================================================================
+ bool WxTreeView::IsAttributeVisible(const std::string& val, int level)
+ {
+ std::vector<std::string> ns=mLevelList[level-1].notShownAtts;
+ std::vector<std::string>::iterator it;
+ bool found=false;
+ for(it=ns.begin();it!=ns.end()&&!found;++it)
+ {
+ if(val.compare(*it)==0)
+ {
+ found=true;
+ }
+ }
+
+ return !found;
}
+ //================================================================
+ //================================================================
+
+ RemoveAlertDlg::RemoveAlertDlg(wxWindow *parent,
+ wxString title,
+ const wxSize& size)
+ : wxDialog( parent,
+ wxID_ANY,
+ title,
+ wxDefaultPosition,
+ size,
+ wxDEFAULT_DIALOG_STYLE)
+ {
+ wxBoxSizer *topsizer = new wxBoxSizer(wxVERTICAL);
+
+ //std::string out("To reload deleted patient, you should synchronize your database before."); // JPR
+ //wxTextCtrl *text = new wxTextCtrl(this, wxID_ANY,crea::std2wx(out),wxDefaultPosition, wxSize(500,20));
+ wxTextCtrl *text = new wxTextCtrl(this, wxID_ANY,
+ _T("To reload deleted patient, you should synchronize your database before."),
+ wxDefaultPosition, wxSize(500,20));
+ mcheck = new wxCheckBox(this, 5478, _T("Do not display this warning again!"));
+ Connect( mcheck->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED , (wxObjectEventFunction) &RemoveAlertDlg::onCheck );
+ wxSizer* buttonsSizer = this->CreateSeparatedButtonSizer(wxOK|wxCANCEL);
+
+ topsizer->Add(text);
+ topsizer->Add(mcheck,0,wxGROW);
+ topsizer->Add(buttonsSizer,0,wxGROW);
+ SetSizer(topsizer, true);
+ mSave = false;
+ Layout();
+ }
+ RemoveAlertDlg::~RemoveAlertDlg(){};
+ bool RemoveAlertDlg::isChecked()
+ {
+ return mSave;
+ }
+ void RemoveAlertDlg::onCheck(wxCommandEvent &Event)
+ {
+ mSave = mcheck->IsChecked();
+ }
+
+
+ //================================================================
//================================================================
BEGIN_EVENT_TABLE(WxTreeView, wxPanel)
/*