1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
|
/*
Aeskulap - DICOM image viewer and network client
Copyright (C) 2005 Alexander Pipelka
This file is part of Aeskulap.
Aeskulap is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
Aeskulap is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Aeskulap; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Alexander Pipelka
pipelka@teleweb.at
Last Update: $Author: braindead $
Update Date: $Date: 2007/04/24 10:49:37 $
Source File: $Source: /cvsroot/aeskulap/aeskulap/widgets/aseriesmenu.cpp,v $
CVS/RCS Revision: $Revision: 1.4 $
Status: $State: Exp $
*/
#include "aseriesmenu.h"
#include "poolseries.h"
#include "poolinstance.h"
#include "seriesview.h"
#include "asimpledisplay.h"
#include <iostream>
#include "gettext.h"
namespace Aeskulap {
void SeriesMenu::add_series(const Glib::RefPtr<ImagePool::Series>& series, SeriesView* w) {
char buffer[200];
if(!series->description().empty()) {
g_snprintf(buffer, sizeof(buffer), gettext("Series %li (%s)\n%s"), m_menuitem.size()+1, series->modality().c_str(), series->description().c_str());
}
else {
g_snprintf(buffer, sizeof(buffer), gettext("Series %li (%s)\nNo description"), m_menuitem.size()+1, series->modality().c_str());
}
Gtk::ImageMenuItem* menuitem = manage(new Gtk::ImageMenuItem(buffer, true));
add(*menuitem);
menuitem->show();
int key = GDK_a + m_menuitem.size();
Gtk::AccelGroup::activate(*menuitem, key, Gdk::CONTROL_MASK);
m_menuitem[series->seriesinstanceuid()] = menuitem;
m_views[series->seriesinstanceuid()] = w;
}
void SeriesMenu::set_thumbnail(const Glib::RefPtr<ImagePool::Instance>& instance) {
if(!instance || instance->pixels() == NULL) {
return;
}
Gtk::ImageMenuItem* menuitem = m_menuitem[instance->series()->seriesinstanceuid()];
if(menuitem == NULL) {
return;
}
if(menuitem->get_image() != NULL) {
return;
}
Aeskulap::SimpleDisplay* image = manage(new Aeskulap::SimpleDisplay);
image->set_image(instance);
menuitem->set_image(*image);
return;
}
void SeriesMenu::set_connection(const Glib::RefPtr<ImagePool::Series>& series, const sigc::slot<void, SeriesView*>& slot) {
std::string uid = series->seriesinstanceuid();
Gtk::ImageMenuItem* menuitem = m_menuitem[uid];
if(menuitem == NULL) {
return;
}
if(m_connections[uid]) {
m_connections[uid].disconnect();
}
m_connections[uid] = menuitem->signal_activate().connect(sigc::bind(slot, m_views[uid]));
}
bool SeriesMenu::get_index(const Gtk::MenuItem& item, int& index) {
Gtk::Menu_Helpers::MenuList::iterator i = items().begin();
index = 0;
for(; i != items().end(); i++) {
if(i->gobj() == item.gobj()) {
return true;
}
index++;
}
return false;
}
void SeriesMenu::swap_entries(const Glib::RefPtr<ImagePool::Series>& series1, const Glib::RefPtr<ImagePool::Series>& series2) {
Gtk::ImageMenuItem* menuitem1 = m_menuitem[series1->seriesinstanceuid()];
Gtk::ImageMenuItem* menuitem2 = m_menuitem[series2->seriesinstanceuid()];
int index1, index2;
if(!get_index(*menuitem1, index1)) {
return;
}
if(!get_index(*menuitem2, index2)) {
return;
}
reorder_child(*menuitem1, index2);
reorder_child(*menuitem2, index1);
}
} // namespace Aeskulap
|