@@ -24,6 +24,7 @@ class AztecToolbar : FrameLayout, OnMenuItemClickListener {
2424 private var aztecToolbarListener: AztecToolbarClickListener ? = null
2525 private var editor: AztecText ? = null
2626 private var headingMenu: PopupMenu ? = null
27+ private var listMenu: PopupMenu ? = null
2728 private var sourceEditor: SourceViewEditText ? = null
2829 private var dialogShortcuts: AlertDialog ? = null
2930 private var isMediaModeEnabled: Boolean = false
@@ -132,7 +133,7 @@ class AztecToolbar : FrameLayout, OnMenuItemClickListener {
132133 }
133134 KeyEvent .KEYCODE_O -> {
134135 if (event.isAltPressed && event.isCtrlPressed) { // Ordered List = Alt + Ctrl + O
135- findViewById( ToolbarAction . ORDERED_LIST .buttonId).performClick( )
136+ editor?.toggleFormatting( TextFormat . FORMAT_ORDERED_LIST )
136137 return true
137138 }
138139 }
@@ -156,7 +157,7 @@ class AztecToolbar : FrameLayout, OnMenuItemClickListener {
156157 }
157158 KeyEvent .KEYCODE_U -> {
158159 if (event.isAltPressed && event.isCtrlPressed) { // Unordered List = Alt + Ctrl + U
159- findViewById( ToolbarAction . UNORDERED_LIST .buttonId).performClick( )
160+ editor?.toggleFormatting( TextFormat . FORMAT_UNORDERED_LIST )
160161 return true
161162 } else if (event.isCtrlPressed) { // Underline = Ctrl + U
162163 findViewById(ToolbarAction .UNDERLINE .buttonId).performClick()
@@ -188,9 +189,11 @@ class AztecToolbar : FrameLayout, OnMenuItemClickListener {
188189 }
189190
190191 override fun onMenuItemClick (item : MenuItem ? ): Boolean {
191- item?.isChecked = (item?.isChecked == false )
192+ val checked = (item?.isChecked == false )
193+ item?.isChecked = checked
192194
193195 when (item?.itemId) {
196+ // Heading Menu
194197 R .id.paragraph -> {
195198 editor?.toggleFormatting(TextFormat .FORMAT_PARAGRAPH )
196199 setHeadingMenuSelector(TextFormat .FORMAT_PARAGRAPH )
@@ -231,6 +234,17 @@ class AztecToolbar : FrameLayout, OnMenuItemClickListener {
231234// editor?.toggleFormatting(TextFormat.FORMAT_PREFORMAT)
232235// return true
233236// }
237+ // List Menu
238+ R .id.list_ordered -> {
239+ editor?.toggleFormatting(TextFormat .FORMAT_ORDERED_LIST )
240+ toggleListMenuSelection(item.itemId, checked)
241+ return true
242+ }
243+ R .id.list_unordered -> {
244+ editor?.toggleFormatting(TextFormat .FORMAT_UNORDERED_LIST )
245+ toggleListMenuSelection(item.itemId, checked)
246+ return true
247+ }
234248 else -> return false
235249 }
236250 }
@@ -279,6 +293,10 @@ class AztecToolbar : FrameLayout, OnMenuItemClickListener {
279293 if (toolbarAction == ToolbarAction .HEADING ) {
280294 setHeadingMenu(findViewById(toolbarAction.buttonId))
281295 }
296+
297+ if (toolbarAction == ToolbarAction .LIST ) {
298+ setListMenu(findViewById(toolbarAction.buttonId))
299+ }
282300 }
283301 }
284302
@@ -321,6 +339,7 @@ class AztecToolbar : FrameLayout, OnMenuItemClickListener {
321339 val appliedStyles = editor!! .getAppliedStyles(selStart, selEnd)
322340 highlightActionButtons(ToolbarAction .getToolbarActionsForStyles(appliedStyles))
323341 selectHeadingMenuItem(appliedStyles)
342+ selectListMenuItem(appliedStyles)
324343 }
325344
326345 private fun onToolbarAction (action : ToolbarAction ) {
@@ -332,21 +351,28 @@ class AztecToolbar : FrameLayout, OnMenuItemClickListener {
332351 val textFormats = ArrayList <TextFormat >()
333352
334353 actions.forEach { if (it.isStylingAction() && it.textFormat != null ) textFormats.add(it.textFormat) }
354+
335355 if (getSelectedHeadingMenuItem() != null ) {
336356 textFormats.add(getSelectedHeadingMenuItem()!! )
337357 }
358+
359+ if (getSelectedListMenuItem() != null ) {
360+ textFormats.add(getSelectedListMenuItem()!! )
361+ }
362+
338363 return editor!! .setSelectedStyles(textFormats)
339364 }
340365
341366 // if text is selected and action is styling - toggle the style
342- if (action.isStylingAction() && action != ToolbarAction .HEADING ) {
367+ if (action.isStylingAction() && action != ToolbarAction .HEADING && action != ToolbarAction . LIST ) {
343368 return editor!! .toggleFormatting(action.textFormat!! )
344369 }
345370
346371 // other toolbar action
347372 when (action) {
348373 ToolbarAction .ADD_MEDIA -> aztecToolbarListener?.onToolbarAddMediaClicked()
349374 ToolbarAction .HEADING -> headingMenu?.show()
375+ ToolbarAction .LIST -> listMenu?.show()
350376 ToolbarAction .LINK -> editor!! .showLinkDialog()
351377 ToolbarAction .HTML -> aztecToolbarListener?.onToolbarHtmlModeClicked()
352378 else -> {
@@ -371,26 +397,53 @@ class AztecToolbar : FrameLayout, OnMenuItemClickListener {
371397 }
372398 }
373399
400+ fun getHeadingMenu (): PopupMenu ? {
401+ return headingMenu
402+ }
403+
404+ fun getListMenu (): PopupMenu ? {
405+ return listMenu
406+ }
407+
408+ fun getSelectedHeadingMenuItem (): TextFormat ? {
409+ if (headingMenu?.menu?.findItem(R .id.paragraph)?.isChecked!! ) return TextFormat .FORMAT_PARAGRAPH
410+ else if (headingMenu?.menu?.findItem(R .id.heading_1)?.isChecked!! ) return TextFormat .FORMAT_HEADING_1
411+ else if (headingMenu?.menu?.findItem(R .id.heading_2)?.isChecked!! ) return TextFormat .FORMAT_HEADING_2
412+ else if (headingMenu?.menu?.findItem(R .id.heading_3)?.isChecked!! ) return TextFormat .FORMAT_HEADING_3
413+ else if (headingMenu?.menu?.findItem(R .id.heading_4)?.isChecked!! ) return TextFormat .FORMAT_HEADING_4
414+ else if (headingMenu?.menu?.findItem(R .id.heading_5)?.isChecked!! ) return TextFormat .FORMAT_HEADING_5
415+ else if (headingMenu?.menu?.findItem(R .id.heading_6)?.isChecked!! ) return TextFormat .FORMAT_HEADING_6
416+ // TODO: Uncomment when Preformat is to be added back as a feature
417+ // else if (headingMenu?.menu?.findItem(R.id.preformat)?.isChecked!!) return TextFormat.FORMAT_PREFORMAT
418+ return null
419+ }
420+
421+ fun getSelectedListMenuItem (): TextFormat ? {
422+ if (listMenu?.menu?.findItem(R .id.list_unordered)?.isChecked!! ) return TextFormat .FORMAT_UNORDERED_LIST
423+ else if (listMenu?.menu?.findItem(R .id.list_ordered)?.isChecked!! ) return TextFormat .FORMAT_ORDERED_LIST
424+ return null
425+ }
426+
374427 private fun selectHeadingMenuItem (textFormats : ArrayList <TextFormat >) {
375428 if (textFormats.size == 0 ) {
376- // Select TextFormat.FORMAT_PARAGRAPH by default.
377- headingMenu?.menu?.getItem( 0 )?.isChecked = true
429+ // Select paragraph by default.
430+ headingMenu?.menu?.findItem( R .id.paragraph )?.isChecked = true
378431 // Use unnumbered heading selector by default.
379432 setHeadingMenuSelector(TextFormat .FORMAT_PARAGRAPH )
380433 } else {
381434 textFormats.forEach {
382435 when (it) {
383- TextFormat .FORMAT_HEADING_1 -> headingMenu?.menu?.getItem( 1 )?.isChecked = true
384- TextFormat .FORMAT_HEADING_2 -> headingMenu?.menu?.getItem( 2 )?.isChecked = true
385- TextFormat .FORMAT_HEADING_3 -> headingMenu?.menu?.getItem( 3 )?.isChecked = true
386- TextFormat .FORMAT_HEADING_4 -> headingMenu?.menu?.getItem( 4 )?.isChecked = true
387- TextFormat .FORMAT_HEADING_5 -> headingMenu?.menu?.getItem( 5 )?.isChecked = true
388- TextFormat .FORMAT_HEADING_6 -> headingMenu?.menu?.getItem( 6 )?.isChecked = true
436+ TextFormat .FORMAT_HEADING_1 -> headingMenu?.menu?.findItem( R .id.heading_1 )?.isChecked = true
437+ TextFormat .FORMAT_HEADING_2 -> headingMenu?.menu?.findItem( R .id.heading_2 )?.isChecked = true
438+ TextFormat .FORMAT_HEADING_3 -> headingMenu?.menu?.findItem( R .id.heading_3 )?.isChecked = true
439+ TextFormat .FORMAT_HEADING_4 -> headingMenu?.menu?.findItem( R .id.heading_4 )?.isChecked = true
440+ TextFormat .FORMAT_HEADING_5 -> headingMenu?.menu?.findItem( R .id.heading_5 )?.isChecked = true
441+ TextFormat .FORMAT_HEADING_6 -> headingMenu?.menu?.findItem( R .id.heading_6 )?.isChecked = true
389442// TODO: Uncomment when Preformat is to be added back as a feature
390- // TextFormat.FORMAT_PREFORMAT -> headingMenu?.menu?.getItem(7 )?.isChecked = true
443+ // TextFormat.FORMAT_PREFORMAT -> headingMenu?.menu?.findItem(R.id.preformat )?.isChecked = true
391444 else -> {
392- // Select TextFormat.FORMAT_PARAGRAPH by default.
393- headingMenu?.menu?.getItem( 0 )?.isChecked = true
445+ // Select paragraph by default.
446+ headingMenu?.menu?.findItem( R .id.paragraph )?.isChecked = true
394447 }
395448 }
396449
@@ -401,8 +454,28 @@ class AztecToolbar : FrameLayout, OnMenuItemClickListener {
401454 }
402455 }
403456
404- fun getHeadingMenu (): PopupMenu ? {
405- return headingMenu
457+ private fun selectListMenuItem (textFormats : ArrayList <TextFormat >) {
458+ if (textFormats.size == 0 ) {
459+ // Select no list by default.
460+ listMenu?.menu?.findItem(R .id.list_none)?.isChecked = true
461+ // Use unordered list selector by default.
462+ setListMenuSelector(TextFormat .FORMAT_UNORDERED_LIST )
463+ } else {
464+ textFormats.forEach {
465+ when (it) {
466+ TextFormat .FORMAT_UNORDERED_LIST -> listMenu?.menu?.findItem(R .id.list_unordered)?.isChecked = true
467+ TextFormat .FORMAT_ORDERED_LIST -> listMenu?.menu?.findItem(R .id.list_ordered)?.isChecked = true
468+ else -> {
469+ // Select no list by default.
470+ listMenu?.menu?.findItem(R .id.list_none)?.isChecked = true
471+ }
472+ }
473+
474+ setListMenuSelector(it)
475+
476+ return
477+ }
478+ }
406479 }
407480
408481 private fun setHeadingMenu (view : View ) {
@@ -411,6 +484,23 @@ class AztecToolbar : FrameLayout, OnMenuItemClickListener {
411484 headingMenu?.inflate(R .menu.heading)
412485 }
413486
487+ private fun setListMenu (view : View ) {
488+ listMenu = PopupMenu (context, view)
489+ listMenu?.setOnMenuItemClickListener(this )
490+ listMenu?.inflate(R .menu.list)
491+ }
492+
493+ private fun setListMenuSelector (textFormat : TextFormat ) {
494+ when (textFormat) {
495+ TextFormat .FORMAT_UNORDERED_LIST -> findViewById(R .id.format_bar_button_list).setBackgroundResource(R .drawable.format_bar_button_ul_selector)
496+ TextFormat .FORMAT_ORDERED_LIST -> findViewById(R .id.format_bar_button_list).setBackgroundResource(R .drawable.format_bar_button_ol_selector)
497+ else -> {
498+ // Use unordered list selector by default.
499+ findViewById(R .id.format_bar_button_list).setBackgroundResource(R .drawable.format_bar_button_ul_selector)
500+ }
501+ }
502+ }
503+
414504 private fun setHeadingMenuSelector (textFormat : TextFormat ) {
415505 when (textFormat) {
416506 TextFormat .FORMAT_HEADING_1 -> findViewById(R .id.format_bar_button_heading).setBackgroundResource(R .drawable.format_bar_button_heading_1)
@@ -427,19 +517,6 @@ class AztecToolbar : FrameLayout, OnMenuItemClickListener {
427517 }
428518 }
429519
430- fun getSelectedHeadingMenuItem (): TextFormat ? {
431- if (headingMenu?.menu?.getItem(0 )?.isChecked!! ) return TextFormat .FORMAT_PARAGRAPH
432- else if (headingMenu?.menu?.getItem(1 )?.isChecked!! ) return TextFormat .FORMAT_HEADING_1
433- else if (headingMenu?.menu?.getItem(2 )?.isChecked!! ) return TextFormat .FORMAT_HEADING_2
434- else if (headingMenu?.menu?.getItem(3 )?.isChecked!! ) return TextFormat .FORMAT_HEADING_3
435- else if (headingMenu?.menu?.getItem(4 )?.isChecked!! ) return TextFormat .FORMAT_HEADING_4
436- else if (headingMenu?.menu?.getItem(5 )?.isChecked!! ) return TextFormat .FORMAT_HEADING_5
437- else if (headingMenu?.menu?.getItem(6 )?.isChecked!! ) return TextFormat .FORMAT_HEADING_6
438- // TODO: Uncomment when Preformat is to be added back as a feature
439- // else if (headingMenu?.menu?.getItem(7)?.isChecked!!) return TextFormat.FORMAT_PREFORMAT
440- return null
441- }
442-
443520 private fun toggleHtmlMode (isHtmlMode : Boolean ) {
444521 ToolbarAction .values().forEach { action ->
445522 if (action == ToolbarAction .HTML ) {
@@ -450,6 +527,23 @@ class AztecToolbar : FrameLayout, OnMenuItemClickListener {
450527 }
451528 }
452529
530+ private fun toggleListMenuSelection (listMenuItemId : Int , isChecked : Boolean ) {
531+ if (isChecked) {
532+ listMenu?.menu?.findItem(listMenuItemId)?.isChecked = true
533+
534+ when (listMenuItemId) {
535+ R .id.list_ordered -> setListMenuSelector(TextFormat .FORMAT_ORDERED_LIST )
536+ R .id.list_unordered -> setListMenuSelector(TextFormat .FORMAT_UNORDERED_LIST )
537+ else -> setListMenuSelector(TextFormat .FORMAT_UNORDERED_LIST ) // Use unordered list selector by default.
538+ }
539+ } else {
540+ listMenu?.menu?.findItem(R .id.list_none)?.isChecked = true
541+
542+ // Use unordered list selector by default.
543+ setListMenuSelector(TextFormat .FORMAT_UNORDERED_LIST )
544+ }
545+ }
546+
453547 fun enableFormatButtons (isEnabled : Boolean ) {
454548 ToolbarAction .values().forEach { action ->
455549 if (action != ToolbarAction .HTML ) {
0 commit comments