41Fermer43
GoldenCrystalLe 11/01/2015 à 13:14
Kevin Kofler (./39) :
GoldenCrystal (./38) :
(Je saute d'un switch à un autre. tongue)
Ça c'est carrément dégueu.

Bah, ça évite soit 2 énormes copiers-collers de blocs entiers, soit si je distribue le if à l'intérieur du switch, un copier-coller du if 9 fois.
C'est pas l'impression que j'en ai… Change l'architecture de ton code et il y aura moins de code:BOOL newFlagThatICreated; if ((newFlagThatICreated = CURRENT_VIEW && CURRENT_VIEW->hasFocus()) || index >= 6) { switch (index) { case 0: editUndo(); break; case 1: editRedo(); break; case 2: editCut(); break; case 3: editCopy(); break; case 4: editPaste(); break; case 5: // F1 context help { int line,col,i; CURRENT_VIEW->cursorPosition().position(line,col); QString textLine=CURRENT_VIEW->document()->line(line); QString wordUnderCursor; for (i=col-1;i>=0;i--) { QChar c=textLine[i]; if ((c>='A' && c<='Z') || (c>='a' && c<='z') || (c>='0' && c<='9') || c=='_' || c=='$' || c=='#') wordUnderCursor.prepend(c); } int len=textLine.length(); for (i=col;i<len;i++) { QChar c=textLine[i]; if ((c>='A' && c<='Z') || (c>='a' && c<='z') || (c>='0' && c<='9') || c=='_' || c=='$' || c=='#') wordUnderCursor.append(c); } // always open at least the index force_qt_assistant_page(1); assistant->openAssistant(); if (wordUnderCursor.isEmpty()) return; QString docFile=lookup_doc_keyword(wordUnderCursor); if (docFile.isEmpty()) return; // wait for Qt Assistant to actually open while (!assistant->isOpen()) QCoreApplication::processEvents(QEventLoop::ExcludeUserInput,1000); assistant->showPage(QString(tigcc_base)+QString("/doc/html/")+docFile); break; } case 6: case 7: if (newFlagThatICreated) { // keyReturn is not in any interface, but it's a public slot... CURRENT_VIEW->qt_metacall(QMetaObject::InvokeMetaMethod, CURRENT_VIEW->metaObject()->indexOfMethod("keyReturn()"),NULL); current_view_newLineHook(); } else { QKeyEvent *keyEvent=new QKeyEvent(QEvent::KeyPress,Qt::Key_Return,'\n',0,"\n"); QApplication::postEvent(focusWidget(),keyEvent); } break; case 8: if (newFlagThatICreated) { new TemplatePopup(CURRENT_VIEW); } break; case 9: case 10: if (newFlagThatICreated && IS_FILE(currentListItem) && CURRENT_VIEW==static_cast<ListViewFile *>(currentListItem)->kateView) { QString fileText=CURRENT_VIEW->document()->text(); CATEGORY_OF(category,currentListItem); // Completion only operates on C files. if (category==cFilesListItem || category==qllFilesListItem || (category==hFilesListItem && !fileText.isEmpty() && fileText[0]!='|' && fileText[0]!=';')) { // Disable newLineHook. shortcuts[6]->setEnabled(FALSE); shortcuts[7]->setEnabled(FALSE); new CompletionPopup(CURRENT_VIEW,pathInProject(currentListItem),this,this); } } break; case 11: // next file case 12: { Q3ListViewItem *item=currentListItem; if (!item) item=rootListItem; Q3ListViewItem *origItem=item; do { item=item->itemBelow(); if (!item) item=rootListItem; if (item==origItem) return; // no suitable items to select } while (item==rootListItem || IS_CATEGORY(item)); fileTreeClicked(item); if (CURRENT_VIEW) CURRENT_VIEW->setFocus(); break; } case 13: // switch transfer target case 14: { preferences.linkTarget=(preferences.linkTarget==LT_TIEMU)?LT_REALCALC:LT_TIEMU; savePreferences(); // Apply the preferences to the debug menu. debugPauseAction->setEnabled(!compiling&&preferences.linkTarget==LT_TIEMU); debugResetAction->setEnabled(!compiling&&preferences.linkTarget==LT_TIEMU); bool runnable=!settings.archive&&!settings.flash_os&&preferences.linkTarget!=LT_NONE; menuBar()->setItemVisible(5,runnable); //debugMenu debugRunAction->setVisible(runnable); debugPauseAction->setVisible(runnable); break; } case 15: projectCompile(); break; case 16: projectMake(); break; default: break; } }À moins que j'aie zappé un truc, ça doit fonctionner…
(C'est juste un refactoring léger parce que j'ai pas que ça à foutre, mais y'a moyen de faire carrément mieux… Par exemple une fonction pour chaque cas réellement différent, ça peut être pas mal tongue)