Bugzilla – Attachment 97404 Details for
Bug 77483
Using XFocusListener to make modal control crashes LibreOffice
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
Macro to be used in Calc when a single cell is selected.
modalctrl.py (text/x-python), 3.15 KB, created by
oz_dkj
on 2014-04-15 12:32:58 UTC
(
hide
)
Description:
Macro to be used in Calc when a single cell is selected.
Filename:
MIME Type:
Creator:
oz_dkj
Created:
2014-04-15 12:32:58 UTC
Size:
3.15 KB
patch
obsolete
> >"""Test of 'modal' control bug.""" > >from com.sun.star.awt import XFocusListener >import unohelper > >class ModalCtrl(unohelper.Base, XFocusListener): > > def __init__(self): > self.cntxt = None # document context > self.address = None # address of corresponding cell > self.built_shape = False # control shape built > self.added_focus = False # Need to remove listener? >## def __del__(self): >## self.demolish() > > def build(self, cntxt): > """Builds and positions listbox in currently selected cell.""" > dsktp = cntxt.ServiceManager.createInstanceWithContext( > 'com.sun.star.frame.Desktop', cntxt) > self.cntxt = cntxt > dcmnt = dsktp.getCurrentComponent() > view = dcmnt.getCurrentController() > # require a SpreadsheetView with a single cell selected > cell = view.getSelection() > self.address = cell.CellAddress > # control model > model = cntxt.ServiceManager.createInstanceWithContext( > 'com.sun.star.form.component.ListBox', cntxt) > model.insertItemText(0, 'ant') > model.insertItemText(1, 'bee') > model.insertItemText(2, 'cricket') > # control shape > shape = dcmnt.createInstance( > 'com.sun.star.drawing.ControlShape') > shape.Position = cell.Position > size = cell.Size > size.Width += 400 > size.Height = 4*size.Height + int(size.Height//2) > shape.Size = size > # attach together > shape.Control = model > view.ActiveSheet.DrawPage.add(shape) # also inserts model in form > self.built_shape = True > ctrl = view.getControl(model) > # register event handlers > ctrl.addFocusListener(self) > self.added_focus = True > # ready for user > ctrl.setFocus() > def demolish(self, ctrl): > """Demolishes listbox built above.""" > if not self.built_shape: > return > sheet = self._getSheet() > assert sheet.DrawPage.getCount() == 1 > shape = sheet.DrawPage.getByIndex(0) > if self.added_focus: > ctrl.removeFocusListener(self) > self.added_focus = False > sheet.DrawPage.remove(shape) # also removes model from form > self.built_shape = False > self.cntxt = None > > def disposing(self, evnt): > """Kill if broadcaster going out of business.""" > self.added_focus = False > self.demolish(evnt.Source) > def focusLost(self, evnt): > """Kill if user leaves control.""" > self.demolish(evnt.Source) > # Unused event listeners. > def focusGained(self, evnt): > pass > > def _getComponent(self): > dtop = self.cntxt.ServiceManager.createInstanceWithContext( > 'com.sun.star.frame.Desktop', self.cntxt) > return dtop.getCurrentComponent() > def _getSheet(self): > dcmnt = self._getComponent() > return dcmnt.getSheets().getByIndex(self.address.Sheet) > >_theObj = ModalCtrl() > >def runControl(): > _theObj.build(XSCRIPTCONTEXT.getComponentContext()) > >g_exportedScripts = runControl,
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 77483
: 97404