Add Popupmenu on Template Edition scintilla gadgets

Working on new editor enhancements?
drgolf
Enthusiast
Enthusiast
Posts: 120
Joined: Tue Mar 03, 2009 3:40 pm
Location: france

Add Popupmenu on Template Edition scintilla gadgets

Post by drgolf »

Hello,

On template tool, in edition mode, editors dont have popup menu for clipboard operations, only drop.

I have added a popup menu, lets go...

On the templates.pb file, on the beginning :

Code: Select all

Structure Template
  Name$
  IsDirectory.l
  Sublevel.l
  IsExpanded.l ; for directories
  
  Comment$
  Code$
EndStructure

Global NewList Template.Template()

Global Template_Selection
Global Template_FirstVisible
Global Template_Splitter
Global Template_AskDelete, Backup_Template_AskDelete
Global Template_DragItem

Global TemplateWindowDialog.DialogWindow, TemplateWindowPosition.DialogPosition

Global *Templates.ToolsPanelEntry ; for global access to the data...
;                                  ;
; change for popup menu
Global tmpl_popmenu
#tmpl_popmenu_paste=1
#tmpl_popmenu_cut=2
#tmpl_popmenu_copy=3
#tmpl_popmenu_selall=4

On the OpenTemplateWindow procedure :

Code: Select all

..... 
; disable template window
    For i = #GADGET_Template_Add To #GADGET_Template_Tree
      DisableGadget(i, 1)
    Next i
    ;
    ; change for popup menu
    tmpl_popmenu=CreatePopupMenu(#PB_Any)
    If tmpl_popmenu       
    MenuItem(#tmpl_popmenu_cut, "Cut")
    MenuItem(#tmpl_popmenu_copy, "Copy")
    MenuItem(#tmpl_popmenu_paste, "Paste")
    MenuItem(#tmpl_popmenu_selall, "Select all")
  EndIf
    ;
.....
On the TemplateWindowEvents procedure :

Code: Select all

....
ElseIf EventID = #PB_Event_Gadget
    If EventGadget() = #GADGET_Template_Save
      
      Length = ScintillaSendMessage(#GADGET_Template_Editor, #SCI_GETTEXTLENGTH, 0, 0)
      Text$ = Space(Length)
      ScintillaSendMessage(#GADGET_Template_Editor, #SCI_GETTEXT, Length+1, @Text$)
      Template()\Code$ = Template_Escape(PeekS(@Text$, -1, #PB_UTF8))
      
      Length = ScintillaSendMessage(#GADGET_Template_SetComment, #SCI_GETTEXTLENGTH, 0, 0)
      Text$ = Space(Length)
      ScintillaSendMessage(#GADGET_Template_SetComment, #SCI_GETTEXT, Length+1, @Text$)
      Template()\Comment$ = Template_Escape(PeekS(@Text$, -1, #PB_UTF8))
      
      SetGadgetText(#GADGET_Template_Comment, GetGadgetText(#GADGET_Template_SetComment))
      TemplateWindowEvents(#PB_Event_CloseWindow) ; close the window
      
      ; Write the templates immediately to disk, so if the IDE crash or force closed, it won't be lost
      Template_Save()
      
    ElseIf EventGadget() = #GADGET_Template_Cancel
      TemplateWindowEvents(#PB_Event_CloseWindow)
      ;
      ; change for popup menu
    ElseIf EventGadget()=#gadget_template_editor Or EventGadget()=#gadget_template_setcomment
      If EventType()=#PB_EventType_RightClick
       DisplayPopupMenu(tmpl_popmenu,WindowID(GetActiveWindow()))      
      EndIf 
    EndIf
    
    ; change for popup menu  
  ElseIf eventid=#PB_Event_Menu
    Select EventMenu()
    Case #tmpl_popmenu_paste
      ScintillaSendMessage(GetActiveGadget(), #SCI_PASTE, 0, 0)
    Case  #tmpl_popmenu_cut
      ScintillaSendMessage(GetActiveGadget(), #SCI_CUT, 0, 0)
    Case #tmpl_popmenu_copy
      ScintillaSendMessage(GetActiveGadget(), #SCI_COPY, 0, 0)
    Case #tmpl_popmenu_selall
      ScintillaSendMessage(GetActiveGadget(), #SCI_SELECTALL, 0, 0)
    EndSelect
    
....
Thats all... then you have to compile the pbide : code and comment editors have popup menu now.

Hope its useful...