OverviewFilesCommitsIssuesDocsReleasesPeers

hardops / ui_framework / window / panel / widget / layout / grid / elements / drag.py

94 lines · python ref:
import time

class Drag_Event():

    time_diff = 0
    start_time = None
    wait_time_from_first_click = .25

    def __init__(self):

        self.db = None
        self.func = None
        self.positive_args = None
        self.negative_args = None
        self.cell_index = None
        self.cell_center_x = None
 
    
    def __del__(self):

        # Event will turn the cell_index to none on left click release
        if self.db.ui_event.cell_index == None:
            Drag_Event.time_diff = 0
            Drag_Event.start_time = None


    def event(self):

        if self.func != None:

            can_call = False

            if Drag_Event.start_time == None:
                Drag_Event.start_time = time.time()

            if time.time() - Drag_Event.start_time > Drag_Event.wait_time_from_first_click:

                # Fine tune
                if self.db.event.shift_pressed:

                    if Drag_Event.time_diff != round(time.time() - Drag_Event.start_time, 2):
                        can_call = True
                        Drag_Event.time_diff = round(time.time() - Drag_Event.start_time, 2)

                else:
                    if Drag_Event.time_diff != round(time.time() - Drag_Event.start_time, 1):
                        can_call = True
                        Drag_Event.time_diff = round(time.time() - Drag_Event.start_time, 1)

                # Keep calling while dragging
                if can_call:
                    if self.cell_center_x != None:
                        self.call_func()


    def set_hook(self):

        self.db.ui_event.cell_index = self.cell_index

        if Drag_Event.start_time == None:
            Drag_Event.start_time = time.time()

        self.call_func()
        

    def call_func(self):

        try:
            # Mouse is on left side
            if self.db.event.mouse_pos[0] < self.cell_center_x:
                if self.negative_args != None:
                    self.func(*self.negative_args)

            # Mouse is on right side
            elif self.db.event.mouse_pos[0] > self.cell_center_x:
                if self.positive_args != None:
                    self.func(*self.positive_args)
        
        except:
            pass


    def external_cell_event_call(self, positive=True):
        '''Used for scrolling, the cells event will call this not self.'''

        if self.func != None:

            if positive == True:
                if self.positive_args != None:
                    self.func(*self.positive_args)
            
            else:
                if self.negative_args != None:
                    self.func(*self.negative_args)