Jest takie rozszerzenie napisane w pythonie, które uruchamia wyskakujący kalendarz. Chciałbym go dostosować do swoich potrzeb.
Normalnie ten kalendarz wyskakuje po naciśnięciu CTRL+PPM. Ja chciałbym, aby sprawdzało czy bieżący arkusz nazywa się "druk" i kalendarz wyskakiwał po naciśnięciu LPM tylko w wybranych komórkach ("J4", "D12", "D17", "F20").
Próbowałem zaprząc do tego chata GPT, ale nie dał rady. :)
Oto kluczowy (chyba) fragment kodu po wprowadzeniu zmian przez GPT. Niestety, nie działa.
Dużo przeróbek nie ma.
Linia 13 została zastąpiona linią 15 i dodane linie od 16 do 21.
Podejmie ktoś temat?
class MouseClickHandler(Listener, XEnhancedMouseClickHandler):
def __init__(self, ctx, doc):
# print("MouseClickHandler.__init__()")
self.ctx = ctx
self.doc = doc
def mousePressed(self, e):
return True
def mouseReleased(self, e):
if not e.Target.supportsService("com.sun.star.sheet.SheetCell"):
return True
# if (e.Buttons, e.ClickCount, e.Modifiers) == (2, 1, 2): # oryginalny wiersz
# Sprawdzenie, czy lewy przycisk myszy (LPM) został wciśnięty
if e.Buttons == 1: # 1 oznacza lewy przycisk myszy (LPM)
# Sprawdzenie, czy aktualnie wybrany arkusz to "druk"
current_sheet = self.doc.CurrentController.getActiveSheet()
if current_sheet.getName() == "druk":
cell_address = e.Target.RangeAddress
allowed_cells = ("J4", "D12", "D17", "F20") # Określ komórki, w których ma działać kalendarz
if cell_address.StartAddress in allowed_cells:
try:
frame = self.doc.CurrentController.Frame
ismultiselection = self.doc.CurrentSelection.queryIntersection(cell_address).Count
if not ismultiselection:
dispatcher = self.ctx.ServiceManager.createInstance("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(frame, ".uno:GoToCell", "", 0,
(PropertyValue("ToPoint", 0, e.Target.AbsoluteName, 0),))
calendar = Calendar(self.ctx, self.doc, e.Target)
Y = e.Y + frame.LayoutManager.CurrentDockingArea.Height + frame.LayoutManager.CurrentDockingArea.Y + 16
X = e.X + 31
calendar.show(X, Y)
return True
except Exception:
traceback.print_exc()
return True