Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "QmitkDataManagerHotkeysPrefPage.h"
00019 #include <QmitkHotkeyLineEdit.h>
00020
00021 #include "berryIPreferencesService.h"
00022 #include "berryPlatform.h"
00023
00024 #include <QLabel>
00025 #include <QPushButton>
00026 #include <QLineEdit>
00027 #include <QGridLayout>
00028 #include <QMessageBox>
00029 #include <QApplication>
00030
00031 #include <map>
00032
00033 using namespace berry;
00034
00035 QmitkDataManagerHotkeysPrefPage::QmitkDataManagerHotkeysPrefPage()
00036 : m_MainControl(0)
00037 {
00038
00039 }
00040
00041 void QmitkDataManagerHotkeysPrefPage::Init(berry::IWorkbench::Pointer )
00042 {
00043
00044 }
00045
00046 void QmitkDataManagerHotkeysPrefPage::CreateQtControl(QWidget* parent)
00047 {
00048 IPreferencesService::Pointer prefService = Platform::GetServiceRegistry().GetServiceById<IPreferencesService>(IPreferencesService::ID);
00049 berry::IPreferences::Pointer _DataManagerHotkeysPreferencesNode = prefService->GetSystemPreferences()->Node("/DataManager/Hotkeys");
00050 m_DataManagerHotkeysPreferencesNode = _DataManagerHotkeysPreferencesNode;
00051
00052 m_HotkeyEditors["Make all nodes invisible"] = new QmitkHotkeyLineEdit("Ctrl+, V");
00053
00054 m_HotkeyEditors["Toggle visibility of selected nodes"] = new QmitkHotkeyLineEdit("V");
00055
00056 m_HotkeyEditors["Delete selected nodes"] = new QmitkHotkeyLineEdit("Del");
00057
00058 m_HotkeyEditors["Reinit selected nodes"] = new QmitkHotkeyLineEdit("R");
00059
00060 m_HotkeyEditors["Global Reinit"] = new QmitkHotkeyLineEdit("Ctrl+, R");
00061
00062 m_HotkeyEditors["Save selected nodes"] = new QmitkHotkeyLineEdit("Ctrl+, S");
00063
00064 m_HotkeyEditors["Load"] = new QmitkHotkeyLineEdit("Ctrl+, L");
00065
00066 m_HotkeyEditors["Show Node Information"] = new QmitkHotkeyLineEdit("Ctrl+, I");
00067
00068 m_MainControl = new QWidget(parent);
00069
00070 QGridLayout* layout = new QGridLayout;
00071 int i = 0;
00072 for (std::map<QString, QmitkHotkeyLineEdit*>::iterator it = m_HotkeyEditors.begin()
00073 ; it != m_HotkeyEditors.end(); ++it)
00074 {
00075 layout->addWidget(new QLabel(it->first), i,0);
00076 layout->addWidget(it->second, i,1);
00077 layout->setRowStretch(i,0);
00078 ++i;
00079 }
00080 layout->setRowStretch(i+1,10);
00081
00082 m_MainControl->setLayout(layout);
00083 this->Update();
00084 }
00085
00086 QWidget* QmitkDataManagerHotkeysPrefPage::GetQtControl() const
00087 {
00088 return m_MainControl;
00089 }
00090
00091 bool QmitkDataManagerHotkeysPrefPage::PerformOk()
00092 {
00093 IPreferences::Pointer _DataManagerHotkeysPreferencesNode = m_DataManagerHotkeysPreferencesNode.Lock();
00094 if(_DataManagerHotkeysPreferencesNode.IsNotNull())
00095 {
00096 bool duplicate = false;
00097 QString keyString;
00098 QString errString;
00099 for (std::map<QString, QmitkHotkeyLineEdit*>::iterator it = m_HotkeyEditors.begin()
00100 ; it != m_HotkeyEditors.end(); ++it)
00101 {
00102 keyString = it->second->GetKeySequenceAsString();
00103
00104 if(keyString.isEmpty())
00105 errString = QString("No valid key sequence for \"%1\"").arg(it->first);
00106
00107 if(errString.isEmpty())
00108 {
00109 std::map<QString, QmitkHotkeyLineEdit*>::iterator it2;
00110
00111 for (it2 = m_HotkeyEditors.begin(); it2 != m_HotkeyEditors.end(); ++it2)
00112 {
00113 if(it->first != it2->first && keyString == it2->second->GetKeySequenceAsString())
00114 {
00115 duplicate = true;
00116 break;
00117 }
00118 }
00119 if(duplicate == true)
00120 errString = QString("Duplicate hot key for \"%1\" and \"%2\"").arg(it->first).arg(it2->first);
00121 }
00122
00123 if(!errString.isEmpty())
00124 {
00125 QMessageBox::critical(QApplication::activeWindow(), "Error", errString);
00126 return false;
00127 }
00128 }
00129
00130
00131 for (std::map<QString, QmitkHotkeyLineEdit*>::iterator it = m_HotkeyEditors.begin()
00132 ; it != m_HotkeyEditors.end(); ++it)
00133 _DataManagerHotkeysPreferencesNode->Put(it->first.toStdString()
00134 , it->second->GetKeySequenceAsString().toStdString());
00135
00136 _DataManagerHotkeysPreferencesNode->Flush();
00137
00138 return true;
00139 }
00140 return false;
00141 }
00142
00143 void QmitkDataManagerHotkeysPrefPage::PerformCancel()
00144 {
00145
00146 }
00147
00148 void QmitkDataManagerHotkeysPrefPage::Update()
00149 {
00150 IPreferences::Pointer _DataManagerHotkeysPreferencesNode = m_DataManagerHotkeysPreferencesNode.Lock();
00151 if(_DataManagerHotkeysPreferencesNode.IsNotNull())
00152 {
00153 for (std::map<QString, QmitkHotkeyLineEdit*>::iterator it = m_HotkeyEditors.begin()
00154 ; it != m_HotkeyEditors.end(); ++it)
00155 {
00156 it->second->setText(QString::fromStdString(_DataManagerHotkeysPreferencesNode->Get(it->first.toStdString()
00157 , it->second->text().toStdString())));
00158 }
00159 }
00160 }