#include <creaImageIOWxTreeView.h>
#include <creaImageIOSystem.h>
#include <wx/splitter.h>
-int wxCALLBACK MyCompareFunction(long item1, long item2, long WXUNUSED(sortData))
-{
- // inverse the order
- if (item1 < item2)
- return -1;
- if (item1 > item2)
- return 1;
+int wxCALLBACK MyCompareFunction(long item1, long item2, long sortData)
+{
+ std::string s1((char*)((long*)item1)[1]);
+ std::string s2((char*)((long*)item2)[1]);
+ GimmickMessage(1,
+ " Check: STRING 1: "
+ <<s1
+ <<" STRING 2: "
+ <<s2
+ <<std::endl);
+ if(sortData==1)
+ {
+ // inverse the order
+ if (s1 < s2)
+ return 1;
+ if (s1 > s2)
+ return -1;
- return 0;
+ return 0;
+ }
+ else
+ {
+ if (s1 < s2)
+ return -1;
+ if (s1 > s2)
+ return 1;
+
+ return 0;
+
+ }
+
}
+
namespace creaImageIO
{
//=====================================================================
// Create the columns : one for each attribute of the level
int col = 0;
- //ctrl->InsertItem(0, "1");
tree::LevelDescriptor::AttributeDescriptorListType::const_iterator a;
for (a = handler->GetTree().GetAttributeDescriptorList(i).begin();
wxListItem it;
it.SetTextColour(*wxRED);
it.SetText(_T("#C"));
- it.SetColumn(col);
- // ctrl->InsertColumn(col, _("Children"), col_style);
+
ctrl->InsertColumn(col,it);
- //ctrl->InsertItem(0, "1");
- //level.key.push_back(_("Children"));
- //level.key.push_back(handler->GetTree().GetChildrenList().size());
col++;
}
/// Initialize the first level splitter
sizer->Add( mLevelList[0].wxSplitter ,1, wxGROW ,0);
-
+ mColumnSelected=1;
+ mDirection=true;
UpdateLevel(1);
SetSizer( sizer );
struct ItemData
{
tree::Node* node;
+ int id;
};
//=====================================================================
<<(*i)->GetLabel()
<<"'"<<level
<<std::endl);
-
+ int _id=0;
//Adds columns
GetTreeHandler()->LoadChildren(*i,1);
tree::Node::ChildrenListType::reverse_iterator j;
);
ItemData* data = new ItemData;
- data->node = *j;
+
+ data->node = *j;
+ item.SetId(_id);
+ /*
+ std::string a=(*j)->GetAttribute(mLevelList[l].key[mColumnSelected-1]);
+ GimmickMessage(1,
+ "State Check: Att VAL"
+ <<a
+ <<std::endl);
+ */
+ data->id = _id;
item.SetData(data);
+ _id++;
long id = GetCtrl(l)->InsertItem(item);
oss << n;
std::string s(oss.str());
+
item.SetText( crea::std2wx(s));
// item.SetTextColour(*wxRED);
// item.SetBackgroundColour(*wxBLACK);
//================================================================
void WxTreeView::OnColClick(wxListEvent& event)
- {
- /*
+ {
//Obtain the column name and the level that needs to be organized
- int colNum=event.m_col;
+ mColumnSelected=event.m_col;
GimmickMessage(1,
" Column " <<event.m_col
<<std::endl);
{
if ( GetCtrl(level) == ctrl ) break;
}
-
+ UpdateLevel(level+1);
wxBusyCursor busy;
- std::vector<tree::Node*> sel=GetSelected(level+1);
-
- tree::Node* nodes[20];
-
- int l = level - 1;
- // to speed up inserting we hide the control temporarily
- GetCtrl(level)->Hide();
- GetCtrl(level)->DeleteAllItems();
-
- std::vector<tree::Node*>::iterator i;
- int num=0;
- for (i=sel.begin(); i!=sel.end(); ++i)
- {
-
- //Adds columns
- GetTreeHandler()->LoadChildren(*i,1);
- tree::Node::ChildrenListType::reverse_iterator j;
-
- for (j = (*i)->GetChildrenList().rbegin();
- j!= (*i)->GetChildrenList().rend();
- ++j)
- {
- nodes[num]=*j;
- num++;
- }
- }
+ int l = level - 1;
+
+ //Sets the data for the items to be sorted
+ std::string att;
- //Sorting elements
- int k, m;
- tree::Node* index;
-
+ int n = GetCtrl(level)->GetItemCount();
+ for (int i = 0; i < n; i++)
+ {
+ //Gets current item data
+ long adr = GetCtrl(level)->GetItemData(i);
+ //Extracts the node
+ tree::Node* nod = ((ItemData*)adr)->node;
+ //Obtains the organizing attribute
+ att=(*nod).GetAttribute(mLevelList[level].key[mColumnSelected-1]);
+ int ty=(*nod).GetAttributeDescriptor(mLevelList[level].key[mColumnSelected-1]).GetType();
+ GimmickMessage(1,"Type:"<<ty<<std::endl);
+ char* d= new char [att.size()+1];
+ strcpy (d, att.c_str());
+
+ //Creates array
+ long* lp= new long[2];
+ lp[0]=adr;
+ lp[1]=(long)d;
+
+ //Sets it as the data
+ GetCtrl(level)->SetItemData(i,(long)lp);
+ }
- for (k=1; k<num; ++k)
- {
- index = nodes[k];
- m = k;
- GimmickMessage(1,
- "Comparison Key 1: "
- <<(nodes[m-1])->GetAttribute(mLevelList[level].key[colNum-1])
- <<"Comparison Key 2: "<<(index)->GetAttribute(mLevelList[level].key[colNum-1])
- <<std::endl);
- while ((m > 0) && ((nodes[m-1])->GetAttribute(mLevelList[level].key[colNum-1]) >
- (index)->GetAttribute(mLevelList[level].key[colNum-1])))
- {
- nodes[m] = nodes[m-1];
- m = m - 1;
- }
- nodes[m] = index;
- }
-
- for (m=0; m<num; ++m)
- {
- tree::Node* node=nodes[m];
- wxListItem item;
- item.SetMask(wxLIST_MASK_STATE |
- wxLIST_MASK_TEXT |
- // wxLIST_MASK_IMAGE |
- wxLIST_MASK_DATA |
- // wxLIST_MASK_WIDTH |
- wxLIST_MASK_FORMAT
- );
-
- long id = GetCtrl(level)->InsertItem(item);
- int n;
- if ((node)->GetChildrenLoaded())
- {
- n=(node)->GetChildrenList().size();
- }
- else
- {
- n= GetTreeHandler()->GetNumberOfChildren(node);
- }
- std::ostringstream oss;
-
- oss << n;
- std::string s(oss.str());
+ if(mDirection)
+ {
+ GetCtrl(level)->SortItems(MyCompareFunction, 0);
+ mDirection=false;
+ }
+ else
+ {
+ GetCtrl(level)->SortItems(MyCompareFunction, 1);
+ mDirection=true;
+ }
- GetCtrl(level)->SetItem(id,0, crea::std2wx(s));
- GetCtrl(level)->SetColumnWidth(0, wxLIST_AUTOSIZE );
+ //Resets original data
- for (int k=1; k<GetCtrl(level)->GetColumnCount(); k++)
- {
- std::string val = (node)->GetAttribute(mLevelList[level].key[k-1]);
- if (val.size()==0) val = "?";
- GetCtrl(level)->SetItem(id,k, crea::std2wx(val));
- GetCtrl(level)->SetColumnWidth(k, wxLIST_AUTOSIZE );
+ long it = -1;
+ for ( ;; )
+ {
+ it = GetCtrl(level)->GetNextItem(it,
+ wxLIST_NEXT_ALL);
+ if ( it == -1 )
+ break;
+ //Gets current item data, extracts the node and resets it
+ long item = GetCtrl(level)->GetItemData(it);
+ GetCtrl(level)->SetItemData(it,((long*)item)[0]);
- }
-
}
-
-
- GetCtrl(level)->Show();
-*/
- }
+
+ }
//================================================================
void WxTreeView::ValidateSelectedImages()
} // EO namespace creaImageIO
-