/** maps an action to a shortcut */ PyObject *map(PyObject *, PyObject *args) { char *action, *shortcut; QPtrList<QAction> *actions = Shortcuts::actions(); QAction *a; if(!PyArg_ParseTuple(args, "ss", &action, &shortcut)){ PyErr_SetString(PyExc_TypeError, "two strings required"); return NULL; } for(a = actions->first(); a; a = actions->next()) if(a->name() == QString(action)){ a->setAccel(QKeySequence(shortcut)); break; } if(!a) qWarning("no command %s found", action); Py_INCREF(Py_None); return Py_None; }
void PopupMenuEditor::setAccelerator( int key, Qt::ButtonState state, int index ) { // FIXME: make this a command int idx = ( index == -1 ? currentIndex : index ); if ( key == Qt::Key_Shift || key == Qt::Key_Control || key == Qt::Key_Alt || key == Qt::Key_Meta || key == Qt::Key_unknown ) return; // ignore these keys when they are pressed PopupMenuEditorItem * i = 0; if ( idx >= (int)itemList.count() ) i = createItem(); else i = itemList.at( idx ); int shift = ( state & Qt::ShiftButton ? Qt::SHIFT : 0 ); int ctrl = ( state & Qt::ControlButton ? Qt::CTRL : 0 ); int alt = ( state & Qt::AltButton ? Qt::ALT : 0 ); int meta = ( state & Qt::MetaButton ? Qt::META : 0 ); QAction * a = i->action(); QKeySequence ks = a->accel(); int keys[4] = { ks[0], ks[1], ks[2], ks[3] }; int n = 0; while ( n < 4 && ks[n++] ); n--; if ( n < 4 ) keys[n] = key | shift | ctrl | alt | meta; a->setAccel( QKeySequence( keys[0], keys[1], keys[2], keys[3] ) ); MetaDataBase::setPropertyChanged( a, "accel", TRUE ); resizeToContents(); }
MainMenubar::MainMenubar (QMainWindow *mw) : QMenuBar (mw, "mainMenubar") { actions.setAutoDelete(FALSE); RcFile rcfile; QPixmap icon(finished); QAction *action = new QAction(this, "actionExit"); action->setMenuText(tr("E&xit")); action->setIconSet(icon); action->setAccel(Qt::CTRL+Qt::Key_Q); action->setStatusTip(tr("Quit Qtstalker (Ctrl+Q)")); action->setToolTip(tr("Quit Qtstalker (Ctrl+Q)")); connect(action, SIGNAL(activated()), this, SIGNAL(signalExit())); actions.replace(Exit, action); icon = configure; action = new QAction(this, "actionOptions"); action->setMenuText(tr("Edit &Preferences")); action->setIconSet(icon); action->setStatusTip(tr("Modify user preferences (Ctrl+0)")); action->setToolTip(tr("Modify user preferences (Ctrl+0)")); connect(action, SIGNAL(activated()), mw, SLOT(slotOptions())); actions.replace(Options, action); icon = nav; bool b; rcfile.loadData(RcFile::ShowSidePanel, b); action = new QAction(this, "actionPanel"); action->setMenuText(tr("Side &Panel")); action->setIconSet(icon); action->setStatusTip(tr("Toggle side-panel view (Ctrl+1)")); action->setToolTip(tr("Toggle side-panel view (Ctrl+1)")); action->setToggleAction(TRUE); action->setOn(b); connect(action, SIGNAL(toggled(bool)), mw, SLOT(slotHideNav(bool))); actions.replace(SidePanel, action); icon = gridicon; rcfile.loadData(RcFile::Grid, b); action = new QAction(this, "actionGrid"); action->setMenuText(tr("Chart &Grid")); action->setIconSet(icon); action->setStatusTip(tr("Toggle chart grid (Ctrl+2)")); action->setToolTip(tr("Toggle chart grid (Ctrl+2)")); action->setToggleAction(TRUE); action->setOn(b); connect(action, SIGNAL(toggled(bool)), this, SIGNAL(signalGrid(bool))); actions.replace(Grid, action); icon = scaletoscreen; rcfile.loadData(RcFile::ScaleToScreen, b); action = new QAction(this, "actionScale"); action->setMenuText(tr("&Scale To Screen")); action->setIconSet(icon); action->setStatusTip(tr("Scale chart to current screen data (Ctrl+3)")); action->setToolTip(tr("Scale chart to current screen data (Ctrl+3)")); action->setToggleAction(TRUE); action->setOn(b); connect(action, SIGNAL(toggled(bool)), this, SIGNAL(signalScale(bool))); actions.replace(ScaleToScreen, action); icon = crosshair; rcfile.loadData(RcFile::Crosshairs, b); action = new QAction(this, "actionCrosshairs"); action->setMenuText(tr("Toggle &Crosshairs")); action->setIconSet(icon); action->setStatusTip(tr("Toggle crosshairs (Ctrl+4)")); action->setToolTip(tr("Toggle crosshairs (Ctrl+4)")); action->setToggleAction(TRUE); action->setOn(b); connect(action, SIGNAL(toggled(bool)), this, SIGNAL(signalCrosshairs(bool))); actions.replace(Crosshairs, action); icon = co; rcfile.loadData(RcFile::DrawMode, b); action = new QAction(this, "actionDraw"); action->setMenuText(tr("Toggle &Draw Mode")); action->setIconSet(icon); action->setStatusTip(tr("Toggle drawing mode (Ctrl+5)")); action->setToolTip(tr("Toggle drawing mode (Ctrl+5)")); action->setToggleAction(TRUE); action->setOn(b); connect(action, SIGNAL(toggled(bool)), this, SIGNAL(signalDraw(bool))); actions.replace(DrawMode, action); icon = papertrade; rcfile.loadData(RcFile::PaperTradeMode, b); action = new QAction(this, "actionPaperTrade"); action->setMenuText(tr("Toggle &Trade Mode")); action->setIconSet(icon); action->setStatusTip(tr("Toggle paper-trade mode")); action->setToolTip(tr("Toggle paper-trade mode")); action->setToggleAction(TRUE); action->setOn(b); connect(action, SIGNAL(toggled(bool)), this, SIGNAL(signalPaperTrade(bool))); actions.replace(PaperTrade, action); icon = indicator; action = new QAction(this, "actionNewIndicator"); action->setMenuText(tr("New &Indicator")); action->setIconSet(icon); action->setStatusTip(tr("Add new indicator (Ctrl+7)")); action->setToolTip(tr("Add new indicator (Ctrl+7)")); connect(action, SIGNAL(activated()), this, SIGNAL(signalNewIndicator())); actions.replace(NewIndicator, action); icon = datawindow; action = new QAction(this, "actionDataWindow"); action->setMenuText(tr("&Data Window")); action->setIconSet(icon); action->setAccel(Qt::ALT+Qt::Key_1); action->setStatusTip(tr("Show data window (Alt+1)")); action->setToolTip(tr("Show data window (Alt+1)")); connect(action, SIGNAL(activated()), mw, SLOT(slotDataWindow())); actions.replace(DataWindow, action); icon = quotes; action = new QAction(this, "actionQuote"); action->setMenuText(tr("Load Quotes")); action->setIconSet(icon); action->setStatusTip(tr("Load Quotes (Ctrl+Y)")); action->setToolTip(tr("Load Quotes (Ctrl+Y)")); connect(action, SIGNAL(activated()), mw, SLOT(slotQuotes())); actions.replace(Quotes, action); icon = qtstalker; action = new QAction(this, "actionAbout"); action->setMenuText(tr("&About")); action->setIconSet(icon); action->setStatusTip(tr("About Qtstalker.")); action->setToolTip(tr("About Qtstalker.")); connect(action, SIGNAL(activated()), mw, SLOT(slotAbout())); actions.replace(About, action); icon = help; action = new QAction(this, "actionHelp"); action->setMenuText(tr("&Help")); action->setIconSet(icon); action->setAccel(Qt::Key_F1); action->setStatusTip(tr("Display Help (F1)")); action->setToolTip(tr("Display Help (F1)")); connect(action, SIGNAL(activated()), mw, SLOT(slotHelp())); actions.replace(Help, action); action = new QAction(this, "actionAdvancePaperTrade"); action->setAccel(Qt::CTRL+Qt::Key_Right); connect(action, SIGNAL(activated()), this, SIGNAL(signalAdvancePaperTrade())); actions.replace(AdvancePaperTrade, action); action = new QAction(this, "actionIndicatorSummary"); action->setMenuText(tr("Indicator Summary")); action->setStatusTip(tr("Indicator Summary")); action->setToolTip(tr("Indicator Summary")); connect(action, SIGNAL(activated()), mw, SLOT(slotIndicatorSummary())); actions.replace(IndicatorSummary, action); Q3Accel *a = new Q3Accel(mw); connect(a, SIGNAL(activated(int)), this, SLOT(slotAccel(int))); a->insertItem(Qt::CTRL+Qt::Key_0, Options); a->insertItem(Qt::CTRL+Qt::Key_1, SidePanel); a->insertItem(Qt::CTRL+Qt::Key_2, Grid); a->insertItem(Qt::CTRL+Qt::Key_3, ScaleToScreen); a->insertItem(Qt::CTRL+Qt::Key_4, Crosshairs); a->insertItem(Qt::CTRL+Qt::Key_5, DrawMode); a->insertItem(Qt::CTRL+Qt::Key_7, NewIndicator); a->insertItem(Qt::CTRL+Qt::Key_Y, Quotes); a->insertItem(Qt::CTRL+Qt::Key_Right, AdvancePaperTrade); a->insertItem(Qt::CTRL+Qt::Key_Escape, 8); createMenus(); rcfile.loadData(RcFile::ShowMenuBar, b); if (!b) hide(); }
/************************************************************** * This is the main method which update the GUI * according to the plugin's data * @param pluginID the id of the plugin * @param type the type of the plugin * @param infos plugin informations * *************************************************************/ void MainWindow::updateGUIWithPluginData(const QString & pluginID, PluginType type, std::vector<MenuAddOn *> & infos) { std::cout << "Dans updateGUIWithPluginData "<< std::endl << "taille d infos transmis " << infos.size() << std::endl; const int nbArgs = infos.size(); //TODO : use Iterator instead of direct access for(int i=0; i<nbArgs; i++) { //First we retrieve the MenuAddOn MenuAddOn* infoMenu = infos[i]; QString emplacement(infoMenu->emplacement->c_str()); qDebug("emplacement = %s ", emplacement.latin1()); // We split the string to learn where the plugin wants // to be connected with the GUI components QStringList decomposition = QStringList::split(INPUT_COMPONENT_SEPARATOR, emplacement); QString component = decomposition[0]; qDebug("Compoment = %s ", component.latin1()); //Which component ? //TODO: To IMPROVE the test if (component == "Menu") { QPopupMenu* aMenu; for(int j=1; j<decomposition.size()-1; j++) { aMenu = _menus.find(decomposition[j]); //Do we already have built this menu if(!aMenu) { QPopupMenu * aMenu = new QPopupMenu( this ); _menus.insert(decomposition[j], aMenu); if (j == 1) { menuBar()->insertItem( decomposition[j], _menus[decomposition[j]]); } else { QPopupMenu* previousMenu = _menus.find(decomposition[j-1]); previousMenu->insertItem( decomposition[j], aMenu); } } } QAction* aAction = new QAction(this); aAction->setText ( decomposition[decomposition.size() -1] ); aAction->setMenuText( decomposition[decomposition.size() -1] ); if( infoMenu->texte != NULL ) { aAction->setAccel( QKeySequence( QString(infoMenu->texte->c_str()) ) ); } if( infoMenu->image != NULL ) { aAction->setIconSet( QIconSet( QPixmap ( QString(IMAGES_DIR).append(infoMenu->image->c_str()) ) ) ); aAction->addTo( _toolBar); } QSignalMapper* _signalMapper = new QSignalMapper(this); _signalMapper->setMapping(aAction, pluginID); connect( aAction, SIGNAL(activated() ), _signalMapper, SLOT(map()) ); switch(infoMenu->typeAppel) { case LOAD_CALL: { connect( _signalMapper, SIGNAL(mapped(const QString &) ), _pluginManager, SLOT(executeLoad(const QString &)) ); break; } case SAVE_CALL: { connect( _signalMapper, SIGNAL(mapped(const QString &) ), _pluginManager, SLOT(executeSave(const QString &)) ); break; } case ACTION_CALL: { break; } default: break; } aAction->addTo(_menus[decomposition[decomposition.size() - 2]]); } // else if (component == "Tool") // { // //TODO : to implement it !!! // } }//end of for loop }
void PreferencesDialog::accept() { cancelSetAccelKey(); if( !isRevealingSequenceSelectionValid() ) { tab->showPage( quizPage ); QMessageBox::warning( this, QObject::tr( "Warning" ), tr( "RevealingOrderMandatory" ) ); return; } if( !isStudyLanguageSelectionValid() ) { tab->showPage( languagePage ); QMessageBox::warning( this, QObject::tr( "Warning" ), tr( "StudyLanguagesMandatory" ) ); return; } if( quizAlgoOriginalRadioButton->isChecked() ) prefs->setQuizAlgorithm( Preferences::ORIGINAL ); else if( quizAlgoSuperMemo2RadioButton->isChecked() ) prefs->setQuizAlgorithm( Preferences::SUPERMEMO2 ); prefs->setQuizCharacterImageLocation( quizCharacterImageLocationField->text() ); prefs->setQuizCharacterImagesAnimated( quizCharacterImageTypeCheckbox->isOn() ); prefs->setQuizLength( quizLengthSlider->value() ); prefs->clearRevealingSequences(); for( SequenceListItem* item = (SequenceListItem*)sequencesView->firstChild(); item; item = (SequenceListItem*)item->nextSibling() ) prefs->addRevealingSequence( item->getSequence() ); prefs->setLabelsFontFamily( labelsFontFamilyComboBox->text( labelsFontFamilyComboBox->currentItem() ) ); int fontSizeNameListLength = sizeof( fontSizeNameList ) / sizeof( QString ); int labelsFontSizeModifier = labelsFontSizeComboBox->currentItem() - ( fontSizeNameListLength - 1 ) / 2; prefs->setLabelsFontSizeModifier( labelsFontSizeModifier ); prefs->setFontFamily( fontFamilyComboBox->text( fontFamilyComboBox->currentItem() ) ); int fontSizeModifier = fontSizeComboBox->currentItem() - ( fontSizeNameListLength - 1 ) / 2; prefs->setFontSizeModifier( fontSizeModifier ); prefs->clearFontOverrideFamilies(); prefs->clearFontOverrideSizes(); int fontOverrideCount = fontOverrideLabels.count(); for( int i = 0; i < fontOverrideCount; i++ ) { const QString& language = Util::getLanguageCode( fontOverrideLabels.at( i )->text() ); if( fontOverrideFamilyComboBoxes.at( i )->currentItem() > 0 ) prefs->setFontOverrideFamily( language, fontOverrideFamilyComboBoxes.at( i )->currentText() ); if( fontOverrideSizeComboBoxes.at( i )->currentItem() > 0 ) { int fontSizeModifier = ( fontOverrideSizeComboBoxes.at( i )->currentItem() - 1 ) - ( fontSizeNameListLength - 1 ) / 2; prefs->setFontOverrideSize( language, fontSizeModifier ); } } bool firstLanguageExists = false; bool testLanguageExists = false; prefs->clearStudyLanguages(); for( QCheckListItem* item = (QCheckListItem*)studyLanguagesListView->firstChild(); item; item = (QCheckListItem*)item->nextSibling() ) { if( item->isOn() ) { QString langCode( Util::getLanguageCode( item->text() ) ); prefs->addStudyLanguage( langCode ); if( !firstLanguageExists ) firstLanguageExists = ( prefs->getFirstLanguage() == langCode ); if( !testLanguageExists ) testLanguageExists = (prefs->getTestLanguage() == langCode ); } } if( !firstLanguageExists ) prefs->setFirstLanguage( QString::null ); if( !testLanguageExists ) prefs->setTestLanguage( QString::null ); prefs->setDigraphEnabled( digraphCheckBox->isOn() ); prefs->setQuizButtonsHidden( hideQuizButtonCheckBox->isOn() ); prefs->setAltInTermListShown( showAltTextInTermListCheckBox->isOn() ); if( keyboardAccelModified ) { for( KeyActionListViewItem* item = (KeyActionListViewItem*)keyboardAccelListView->firstChild(); item ; item = (KeyActionListViewItem*)item->nextSibling() ) { QAction *action = item->getAction(); action->setAccel( item->getKey() ); prefs->setAccelerator( item->getActionIndex(), item->getKey() ); } } QDialog::accept(); }