PopUp_Settings = 501,
PopUp_About = 502,
PopUp_User = WxGimmick::UserMenuFirstId,
+ PopUp_SaveAs = 701,
+ PopUp_AddToFavorites = 702
};
//================================================================
// Image sizer
wxBoxSizer *isizer = new wxBoxSizer(wxHORIZONTAL );
mPanelImage->SetSizer( isizer );
-
+
+ // Notebook
+ mwxNotebook = new wxNotebook(mSplitter2,
+ -1,wxDefaultPosition, wxDefaultSize, 0);
+
+
+
// Fields view (bottom)
- mFieldsView = new WxGimmickFieldsView(mSplitter2,-1,
+ mFieldsView = new WxGimmickFieldsView(mwxNotebook,-1,
wxDefaultPosition,
wxDefaultSize,0);
GetSettings().BgColour(DicomNode::Series),
GetSettings().Colour(DicomNode::Image),
GetSettings().BgColour(DicomNode::Image));
+ mwxNotebook->AddPage( mFieldsView, _T("Dicom fields"));
-
-
+ // Help
+ mHelp = new WxGimmickHelp(mwxNotebook);
+ mwxNotebook->AddPage( mHelp, _T("Help"));
+
+ // Splitting
int wsize = size.GetWidth();
int hsize = size.GetHeight();
int previewhsize = 150;
int previewwsize = 400;
mSplitter2->SetMinimumPaneSize( previewhsize );
- mSplitter2->SplitHorizontally( mPanelImage, mFieldsView,
+ mSplitter2->SplitHorizontally( mPanelImage, mwxNotebook, //mFieldsView,
hsize - previewhsize);
rsizer->Add( mSplitter2,1,wxGROW ,0);
ShowImage(mReader.GetImage(""));
- mJustStarted = true;
+ // Show help if no collection
+ if (GetDicomDatabaseList().size()==0)
+ {
+ mwxNotebook->SetSelection(1);
+ }
+ else
+ {
+ mwxNotebook->SetSelection(0);
+ }
+ // mJustStarted = true;
}
//================================================================
}
}
+ if (GetDicomDatabaseList().size()==0) mFieldsView->UpdateFields(db);
GetDicomDatabaseList().push_back(db);
UpdateDicomDatabaseView(db);
+
}
//================================================================
{
wxBusyCursor busy;
// std::cout << "WxGimmick : Reading config"<<std::endl;
+ LoadOrCreateFavoritesDatabase();
- // std::cout << "==> Loading collections from '"<<mDatabaseListFile
+ // std::cout <<
+ creaMessage("Gimmick!",1,"Gimmick! : ==> Loading collections from '"<<mDatabaseListFile<<"'"<<std::endl);
// <<"'"<<std::endl;
+
std::ifstream s;
s.open(mDatabaseListFile.c_str());
if (s.good())
}
else
{
- // std::cout << " ... ERROR !"<<std::endl;
+ creaMessage("Gimmick!",1," ==> ERROR opening collection '"<<tokens[0]<<"'"<<std::endl);
delete db;
}
}
}
else
{
- std::cout << "ERROR opening "<<mDatabaseListFile<<std::endl;
+ creaMessage("Gimmick!",1," ==> File does not exist. It will be created on exit (if you already ran Gimmick! and exited normally, this is not normal. Send a bug report).");
}
}
//================================================================
+ //================================================================
+ void WxGimmick::LoadOrCreateFavoritesDatabase()
+ {
+ // TODO
+ }
+ //================================================================
+
/*
//================================================================
void WxGimmick::OnClose(wxCloseEvent& event)
}
if (data->IsDicomNode())
{
- /*
+
// LG : BUGGY
+ /*
std::string str("&Remove ");
str += data->GetDicomNode()->GetTypeName();
menu.Append(PopUp_Remove, std2wx(str));
void WxGimmick::OnPopUpSettings(wxCommandEvent& event)
{
WxGimmickSettingsDialog* s =
- new WxGimmickSettingsDialog(this);
+ new WxGimmickSettingsDialog(this,&mSettings);
s->ShowModal();
delete s;
}
}
sib = GetTreeListCtrl()->GetNextSibling(sib);
}
- prio = maxprio + 1000;
+ prio = maxprio + 999;
sib = GetTreeListCtrl()->GetPrevSibling(item);
while (sib.IsOk())
{
void WxGimmick::ShowImage(vtkImageData* im)
{
// wxBusyCursor busy;
+ mViewer->SetInput( im );
+ mViewer->SetSlice( 0 );
+
int x1,x2,y1,y2,z1,z2;
double spx,spy,spz;
+ im->Update();
im->GetSpacing(spx,spy,spz);
im->GetExtent (x1,x2,y1,y2,z1,z2);
-
/*
+ std::cout << "-----------------------------"<<std::endl;
std::cout << x1 << "-"<<x2<<std::endl;
std::cout << y1 << "-"<<y2<<std::endl;
std::cout << z1 << "-"<<z2<<std::endl;
mspy = spy;
mspz = spz;
+ double *range = im->GetScalarRange();
+ mViewer->SetColorWindow(range[1] - range[0]);
+ mViewer->SetColorLevel(0.5 * (range[1] + range[0]));
+
+ mViewer->GetRenderer()->ResetCamera();
+ double bounds[6];
+
+
+ mViewer->GetRenderer()->ComputeVisiblePropBounds(bounds);
+
+ /*
+ std::cout <<"bounds : "<<bounds[0]<<","
+<<bounds[1]<<","
+<<bounds[2]<<","
+<<bounds[3]<<","
+<<bounds[4]<<","
+ <<bounds[5]<<std::endl;
+ */
+ mViewer->GetRenderer()->ResetCameraClippingRange(bounds);
+ /*
vtkCamera *camera = mViewer->GetRenderer()->GetActiveCamera();
camera->SetViewUp ( spx*0, -spy*1, spz*0);
- camera->SetPosition( spx*(x1+x2)/2, spy*(y1+y2)/2, -spz*10000000);
+ camera->SetPosition( spx*(x1+x2)/2, spy*(y1+y2)/2, spz*10000000);
camera->SetFocalPoint ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0);
camera->ComputeViewPlaneNormal();
camera->SetParallelScale( spx*(x2-x1)/2.0 );
+ camera->Roll ( 180 );
+ */
}
- mViewer->SetInput( im );
- mViewer->SetSlice( 0 );
mInteractor->Render();
}
//================================================================
void WxGimmick::OnInternalIdle()
{
ProcessImageEvents();
+ /*
if (mJustStarted)
{
- // Show tip if no collection
- if (GetDicomDatabaseList().size()==0)
- {
- ShowHelp();
- }
+
mJustStarted = false;
- }
+ }
+ */
//
}
//================================================================
ext[5] = im.size();
out->SetExtent(ext);
// LG : TODO : Z Spacing ?
+ //
+ // ==> to get an accurate ZSpacing from a Dicom set of files
+ // ==> you need a gdcm::SerieHelper
+ // JPR
out->AllocateScalars();
//====================================================================
void WxGimmick::ShowHelp()
{
+ /*
if (mHelpWindow==0)
{
mHelpWindow = new WxGimmickHelpWindow(this);
}
mHelpWindow->CenterOnParent();
mHelpWindow->ShowModal();
+ */
}
//====================================================================