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