@@ -78,6 +78,7 @@ import com.ichi2.anki.dialogs.CardBrowserMySearchesDialog
7878import com.ichi2.anki.dialogs.CardBrowserMySearchesDialog.Companion.newInstance
7979import com.ichi2.anki.dialogs.CardBrowserMySearchesDialog.MySearchesDialogListener
8080import com.ichi2.anki.dialogs.CardBrowserOrderDialog
81+ import com.ichi2.anki.dialogs.ChangeNoteTypeDialog
8182import com.ichi2.anki.dialogs.CreateDeckDialog
8283import com.ichi2.anki.dialogs.DeckSelectionDialog
8384import com.ichi2.anki.dialogs.DeckSelectionDialog.Companion.newInstance
@@ -789,6 +790,11 @@ open class CardBrowser :
789790 searchForMarkedNotes()
790791 return true
791792 }
793+ if (event.isCtrlPressed && event.isShiftPressed) {
794+ Timber .i(" Ctrl+Shift+M: Change Note Type" )
795+ showChangeNoteType()
796+ return true
797+ }
792798 }
793799 KeyEvent .KEYCODE_Z -> {
794800 if (event.isCtrlPressed) {
@@ -1217,6 +1223,10 @@ open class CardBrowser :
12171223 toggleBury()
12181224 return true
12191225 }
1226+ R .id.action_change_note_type -> {
1227+ showChangeNoteType()
1228+ return true
1229+ }
12201230 R .id.action_change_deck -> {
12211231 showChangeDeckDialog()
12221232 return true
@@ -1468,6 +1478,28 @@ open class CardBrowser :
14681478 }
14691479 }
14701480
1481+ private fun getChangeNoteTypeDialog (noteIds : List <Long >): ChangeNoteTypeDialog {
1482+ val dialog = ChangeNoteTypeDialog .newInstance(noteIds)
1483+
1484+ return dialog
1485+ }
1486+
1487+ private fun showChangeNoteType () =
1488+ launchCatchingTask {
1489+ if (! viewModel.hasSelectedAnyRows()) {
1490+ Timber .i(" Not showing Change Note Type - No Cards" )
1491+ return @launchCatchingTask
1492+ }
1493+ if (! viewModel.allSelectedNotesOfSameType()) {
1494+ Timber .i(" All notes are not of the same type" )
1495+ showSnackbar(R .string.different_note_types_selected)
1496+ return @launchCatchingTask
1497+ }
1498+ // ChangeNoteTypeDialog .newInstance(viewModel.queryAllSelectedNoteIds())
1499+ val dialog = getChangeNoteTypeDialog(viewModel.queryAllSelectedNoteIds())
1500+ showDialogFragment(dialog)
1501+ }
1502+
14711503 @KotlinCleanup(" DeckSelectionListener is almost certainly a bug - deck!!" )
14721504 fun getChangeDeckDialog (selectableDecks : List <SelectableDeck >? ): DeckSelectionDialog {
14731505 val dialog =
0 commit comments