__author__ = 'CAM'

from win32com.client import CDispatch

from IFikomObject import IFikomObject
from IGorunumAyarlari import IGorunumAyarlari
from ISeciliEleman import ISeciliEleman





class ISecililer(IFikomObject):
    def __init__(self, obj:CDispatch, sahip:IFikomObject=None):
        super(ISecililer, self).__init__(obj, sahip)

        # --->Sabit Degiskenler

    @property
    def sayisi(self) -> int:
        return self.catNesne.Count

    @property
    def sayisi2(self) -> int:
        return self.catNesne.Count2

    def ekle(self, obje):
        ObjeTemp = None
        if isinstance(obje, IFikomObject):
            ObjeTemp = obje.catNesne
        else:
            ObjeTemp = obje
        self.catNesne.Add(ObjeTemp)

    def temizle(self):
        self.catNesne.Clear()

    def kopyala(self):
        self.catNesne.Copy()

    def kes(self):
        self.catNesne.Cut()

    def sil(self):
        self.catNesne.Delete()

    def filitre(self, Filitreler=[]):
        return self.catNesne.FilterCorrespondence(Filitreler)

    def bul(self, ObjeIsmi):
        return IFikomObject(self.catNesne.FindObject(ObjeIsmi))

    def belirtmeliSec2d(self, Mesaj, Filitreler=[], SecilirkenCalistir=False, Ipucu=True,
                        FareHareketindeTetikle=True, SecilenNesne=False, PencerePozisyon=[]):
        return self.catNesne.IndicateOrSelectElement2D(Mesaj, Filitreler, SecilirkenCalistir, Ipucu,
                                                       FareHareketindeTetikle, SecilenNesne, PencerePozisyon)

    def belirtmeliSec3d(self, Mesaj, Filitreler=[], SecilirkenCalistir=False, Ipucu=True,
                        FareHareketindeTetikle=True, SecilenNesne=False, PencerePozisyon=[]):
        pass
        return self.catNesne.IndicateOrSelectElement2D(Mesaj, Filitreler, SecilirkenCalistir, Ipucu,
                                                       FareHareketindeTetikle, SecilenNesne, PencerePozisyon)

    def item(self, val) -> ISeciliEleman:
        if isinstance(val, int):
            val = val + 1
        return ISeciliEleman(self.catNesne.Item(val), self)

    def item2(self, val) -> ISeciliEleman:
        if isinstance(val, int):
            val = val + 1
        return ISeciliEleman(self.catNesne.Item2(val), self)

    def yapistir(self):
        self.catNesne.Paste()

    def yapistirOzel(self, Format):
        self.catNesne.PasteSpecial(Format)

    def kaldir(self, index):
        self.catNesne.Remove(index)

    def kaldir2(self, index):
        self.catNesne.Remove2(index)

    def ara(self, Sorgu):
        return self.catNesne.Search(Sorgu)

    def sec2(self, Filitreler=[], Mesaj="", SecilirkenCalistir=False):
        return self.catNesne.SelectElement2(Filitreler, Mesaj, SecilirkenCalistir)

    def sec3(self, Filitreler=[], Mesaj="", SecilirkenCalistir=False, CokluSecim=2, Ipucu=True):
        """
            enum CATMultiSelectionMode {
              CATMonoSel,
              CATMultiSelTriggWhenSelPerf,
              CATMultiSelTriggWhenUserValidatesSelection
            }
        """
        return self.catNesne.SelectElement3(Filitreler, Mesaj, SecilirkenCalistir, CokluSecim, Ipucu)

    def sec4(self, filitreler=[], aktifdokumanmesaj="", deaktifDokumanMesaj="", ipucu=False,
             dokuman=None):
        return self.catNesne.SelectElement4(filitreler, aktifdokumanmesaj, deaktifDokumanMesaj, ipucu, dokuman)

    @property
    def gorunum(self) -> IGorunumAyarlari:
        return IGorunumAyarlari(self.catNesne.VisProperties, self)

    def __call__(self) -> list:
        Sayisi = self.sayisi
        return [self.item(x) for x in range(Sayisi)]

    def __str__(self) -> str:
        Sayisi = self.sayisi
        return repr([str(self.item(x).nesne.ismi) for x in range(Sayisi)])

    def __len__(self) -> int:
        return int(self.sayisi)

    def __getitem__(self, item) -> ISeciliEleman:
        return self.item(item)