Пример #1
0
class MainForm(QDialog):
   def __init__(self, parent = None):
      QDialog.__init__(self, parent)
      
      # If a Nemu instance is already running, this is as far as we go
      self.connectToRunning()
      
      self.holdOpen = False
      self.menuItems = []
      self.allItems = []
      self.favorites = []
      self.currentItem = None
      self.menuFile = os.path.expanduser('~/.nemu/menu')
      self.favoritesFile = os.path.expanduser('~/.nemu/favorites')
      self.settingsFile = os.path.expanduser('~/.nemu/settings')
      self.initSettings()

      self.server = QLocalServer()
      self.server.newConnection.connect(self.handleConnection)
      QLocalServer.removeServer('nemuSocket')
      self.server.listen('nemuSocket')
      
      self.configDir = os.path.expanduser('~/.nemu')
      if not os.path.isdir(self.configDir):
         os.mkdir(self.configDir)
      self.menuItems = self.loadConfig(self.menuFile, self.menuItems)
      self.favorites = self.loadConfig(self.favoritesFile, self.favorites)
      # Don't load directly into self.settings so we can add new default values as needed
      tempSettings = self.loadConfig(self.settingsFile, self.settings)
      for key, value in tempSettings.items():
         self.settings[key] = value
      
      # This should never happen, but unfortunately bugs do, so clean up orphaned items.
      # We need to do this because these items won't show up in the UI, but may interfere with
      # merges if they duplicate something that is being merged in.
      self.menuItems[:] = [i for i in self.menuItems if i.parent == None or i.parent in self.menuItems]
      # Look for broken icon paths
      needSave = False
      for i in self.menuItems + self.favorites:
          if not os.path.exists(i.icon):
              i.findIcon()
              needSave = True
      if needSave:
         self.saveMenu()


      for i in self.menuItems:
         if not hasattr(i, 'imported'):
            i.imported = False
      
      self.setupUI()
      
      self.setContextMenuPolicy(Qt.ActionsContextMenu)
      self.createMenu(self)
      
      self.refresh(False)
      
      if len(self.menuItems) == 0:
         self.firstRun()
      
      self.show()
      
      self.keepaliveTimer = QTimer(self)
      self.keepaliveTimer.timeout.connect(self.keepalive)
      self.keepaliveTimer.start(60000)
      
      
   def initSettings(self):
      self.settings = dict()
      self.settings['width'] = 400
      self.settings['height'] = 400
      self.settings['quit'] = False
      self.settings['imported'] = []
      self.settings['iconTheme'] = None
      
      
   def loadConfig(self, filename, default):
      if os.path.exists(filename):
         with open(filename, 'rb') as f:
            return cPickle.load(f)
      else:
         return default
      
      
   def setupUI(self):
      self.resize(self.settings['width'], self.settings['height'])
      self.setWindowFlags(Qt.FramelessWindowHint | Qt.CustomizeWindowHint | Qt.WindowStaysOnTopHint)
      #self.setWindowFlags(Qt.X11BypassWindowManagerHint)
      self.setWindowTitle('Nemu')
      self.setMouseTracking(True)
      
      iconPath = os.path.join(os.path.dirname(__file__), 'images')
      iconPath = os.path.join(iconPath, 'nemu.png')
      self.setWindowIcon(IconCache()[iconPath])
      
      self.place()
      
      self.buttonListLayout = QVBoxLayout(self)
      self.setMargins(self.buttonListLayout)
      
      self.buttonLayout = QHBoxLayout()
      self.setMargins(self.buttonLayout)
      
      # Settings and Filter box
      self.filterLayout = QHBoxLayout()
      self.settingsButton = QPushButton()
      self.settingsButton.setIcon(QIcon(iconPath))
      self.settingsButton.setMinimumHeight(35)
      self.settingsButton.clicked.connect(self.settingsClicked)
      self.filterLayout.addWidget(self.settingsButton, 0)
      
      self.filterLabel = QLabel("Filter")
      self.filterLayout.addWidget(self.filterLabel)
      
      self.filterBox = QLineEdit()
      self.filterBox.textChanged.connect(self.refresh)
      self.filterLayout.addWidget(self.filterBox)
      
      self.sizeGrip = QSizeGrip(self)
      self.sizeGrip.setMinimumSize(QSize(25, 25))
      self.filterLayout.addWidget(self.sizeGrip, 0, Qt.AlignRight | Qt.AlignTop)
      
      self.buttonListLayout.addLayout(self.filterLayout)
      
      # Top buttons and labels
      self.backButton = QPushButton('Favorites')
      self.backButton.setMinimumHeight(35)
      self.backButton.clicked.connect(self.backClicked)
      self.buttonLayout.addWidget(self.backButton, 1)
      
      self.currentLabel = QLabel()
      self.currentLabel.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
      self.buttonLayout.addWidget(self.currentLabel, 1)
      
      self.buttonListLayout.addLayout(self.buttonLayout, 0)
      
      # Menu item display
      self.listSplitter = QSplitter()
      self.buttonListLayout.addWidget(self.listSplitter, 1)
      
      self.leftList = ListWidget(self.clearListMouseOver)
      self.listSplitter.addWidget(self.leftList)
      
      self.rightList = ListWidget(self.clearListMouseOver)
      self.listSplitter.addWidget(self.rightList)
      
      # Has to be done after adding widgets to the splitter or the size will get reset again
      if 'splitterState' in self.settings:
         self.listSplitter.restoreState(self.settings['splitterState'])
      
   def setMargins(self, layout, margin = 0):
      layout.setSpacing(margin)
      layout.setContentsMargins(margin, margin, margin, margin)
      
      
   def createMenu(self, widget):
      addFavoriteAction = QAction('Add to Favorites', self)
      addFavoriteAction.triggered.connect(self.addFavoriteClicked)
      widget.insertAction(None, addFavoriteAction)
      addAction = QAction("New...", self)
      addAction.triggered.connect(self.newClicked)
      widget.insertAction(None, addAction)
      editAction = QAction("Edit...", self)
      editAction.triggered.connect(self.editClicked)
      widget.insertAction(None, editAction)
      deleteAction = QAction("Delete", self)
      deleteAction.triggered.connect(self.deleteClicked)
      widget.insertAction(None, deleteAction)
      
      
   def hideOrClose(self):
      if self.settings['quit']:
         self.close()
      else:
         self.hide()
         
   def closeEvent(self, event):
      self.saveSettings()
      
   def hideEvent(self, event):
      self.releaseMouse()
      self.saveSettings()
      
   def mouseMoveEvent(self, event):
      if self.hasMouse():
         self.releaseMouse()
      
   def leaveEvent(self, event):
      # If we set holdOpen, it means that we've opened a dialog, so we shouldn't grab
      if not self.hasMouse():
         self.grabMouse()
      
   def mousePressEvent(self, event):
      if not self.hasMouse():
         self.hideOrClose()
         
   def hasMouse(self):
      return self.geometry().contains(QCursor.pos())
         

   def saveSettings(self):
      self.settings['splitterState'] = self.listSplitter.saveState()
      self.settings['width'] = self.width()
      self.settings['height'] = self.height()
      with open(self.settingsFile, 'wb') as f:
         cPickle.dump(self.settings, f)
         
   def place(self):
      desktop = qApp.desktop()
      screenSize = desktop.availableGeometry(QCursor.pos())
      self.move(screenSize.x(), screenSize.y() + screenSize.height() - self.height())
         
         
   def newClicked(self):
      form = AddForm()
      
      self.holdOpen = True
      form.exec_()
      self.checkMouse()
      self.holdOpen = False
      
      if form.accepted:
         item = MenuItem()
         item.name = form.name
         item.command = form.command
         item.working = form.working
         item.folder = form.folder
         item.icon = form.icon
         item.findIcon()
         
         clicked = self.getClicked()
         if clicked:
            parent = clicked.item.parent
         elif self.leftList.mouseOver:
            if self.currentItem != None:
               parent = self.currentItem.parent
            else:
               parent = None
         else:
            parent = self.currentItem
         item.parent = parent
         
         self.menuItems.append(item)
         self.refresh()
      
   def editClicked(self):
      form = AddForm()
      clicked = self.getClicked()
      if clicked == None:
         return
      item = clicked.item
      
      form.name = item.name
      form.command = item.command
      form.working = item.working
      form.folder = item.folder
      form.icon = item.icon
      form.populateFields()
      
      self.holdOpen = True
      form.exec_()
      self.checkMouse()
      self.holdOpen = False
      
      if form.accepted:
         item.name = form.name
         item.command = form.command
         item.working = form.working
         item.folder = form.folder
         item.icon = form.icon
         item.imported = False
         item.findIcon()
         self.refresh()
         
         
   def checkMouse(self):
      if not self.hasMouse():
         self.grabMouse()
      
      
   def deleteClicked(self):
      clicked = self.getClicked()
      if clicked == None:
         return
      self.delete(clicked.item)
      self.refresh()
      
   # Delete item and all of its children so we don't leave around orphaned items
   def delete(self, item):
      for i in self.menuItems:
         if i.parent == item:
            i.deleted = True
      
      if item in self.menuItems:
         item.deleted = True
         item.imported = False
      if item in self.favorites:
         self.favorites.remove(item)
      
      
   def addFavoriteClicked(self):
      newFavorite = copy.copy(self.getClicked().item)
      newFavorite.parent = None
      self.favorites.append(newFavorite)
      self.refresh()
      
      
   def getClicked(self):
      for i in self.allItems:
         if i.mouseOver:
            return i
            
   def clearMouseOver(self):
      for i in self.allItems:
         i.mouseOver = False
         
   def clearListMouseOver(self):
      self.leftList.mouseOver = False
      self.rightList.mouseOver = False
      
      
   def refresh(self, save = True):
      self.leftList.clear()
      self.rightList.clear()
      self.allItems = []
      sortedLeft = []
      sortedRight = []
      self.updateFilter()
      
      if self.currentItem != None:
         currParent = self.currentItem.parent
         for i in self.menuItems:
            if i.parent == currParent and not i.deleted and i.matchedFilter:
               sortedLeft.append(i)
      else:
         for i in self.favorites:
            sortedLeft.append(i)
      
      for i in self.menuItems:
         if i.parent == self.currentItem and not i.deleted and i.matchedFilter:
            sortedRight.append(i)
            
      sortedLeft.sort(key = lambda x: x.name)
      sortedLeft.sort(key = lambda x: not x.folder)
      sortedRight.sort(key = lambda x: x.name)
      sortedRight.sort(key = lambda x: not x.folder)
      for i in sortedLeft:
         self.leftList.add(self.createItem(i))
      for i in sortedRight:
         self.rightList.add(self.createItem(i))
         
      if save:
         self.saveMenu()

   def saveMenu(self):
      # Save the current menu status
      with open(self.menuFile, 'wb') as f:
         cPickle.dump(self.menuItems, f)
      with open(self.favoritesFile, 'wb') as f:
         cPickle.dump(self.favorites, f)

   def createItem(self, item):
      newItem = ListItem(item, self.clearMouseOver)
      newItem.clicked.connect(self.itemClicked)
      self.allItems.append(newItem)
      return newItem
      
   def updateFilter(self):
      filterValue = str(self.filterBox.text())
      
      for i in self.menuItems:
         i.checkFilter(filterValue)
            
      
   def itemClicked(self):
      sender = self.sender()
      if sender.item.folder:
         self.setCurrentItem(sender.item)
         self.refresh(False)
      else:
         flags = ['f', 'F', 'u', 'U', 'd', 'D', 'n', 'N', 'i', 'k', 'v', 'm']
         command = sender.item.command
         for i in flags:
            command = command.replace('%' + i, '')
         # %c needs a proper value in some cases
         command = command.replace('%c', '"%s"' % sender.item.name)
         working = sender.item.working
         if not os.path.isdir(working):
            working = None
            
         # Need to redirect stdout and stderr so if the process writes something it won't fail
         with open(os.path.devnull, 'w') as devnull:
            Popen(command + '&', stdout=devnull, stderr=devnull, shell=True, cwd=working)
         self.hideOrClose()
         
         
   def backClicked(self):
      if self.currentItem:
         self.setCurrentItem(self.currentItem.parent)
         self.refresh(False)
         
         
   def setCurrentItem(self, item):
      self.currentItem = item
      if item != None:
         self.currentLabel.setText(item.name)
         if item.parent != None:
            self.backButton.setText(item.parent.name)
         else:
            self.backButton.setText('Favorites')
      else:
         self.currentLabel.setText('')
         self.backButton.setText('Favorites')
         
         
   def settingsClicked(self):
      form = SettingsForm(self)
      form.quitCheck.setChecked(self.settings['quit'])
      theme = self.settings.get('iconTheme')
      if theme:
         form.themeCombo.setCurrentIndex(form.themeCombo.findText(theme))
      
      self.holdOpen = True
      form.exec_()
      self.checkMouse()
      self.holdOpen = False
      
      if form.accepted:
         self.settings['quit'] = form.quitCheck.isChecked()
      
      
   def firstRun(self):
      QMessageBox.information(self, 'First Time?', 'Your menu is currently empty.  It is recommended that you import an existing menu file.')
      self.settingsClicked()
      
      
   def connectToRunning(self):
      self.socket = QLocalSocket()
      self.socket.connectToServer('nemuSocket')
      self.socket.waitForConnected(1000)
      
      if self.socket.state() == QLocalSocket.ConnectedState:
         print 'Server found'
         if self.socket.waitForReadyRead(3000):
            line = self.socket.readLine()
            print line
         else:
            print self.socket.errorString()
         sys.exit()
      else:
         print 'No server running'
      
      
   def handleConnection(self):
      import datetime
      print "Got connection", datetime.datetime.now()
      
      connection = self.server.nextPendingConnection()
      connection.write('connected')
      del connection
      
      self.setCurrentItem(None)
      self.filterBox.setText('')
      self.refresh(False)
      self.show()
      print "Showed", datetime.datetime.now()
      return
      
      
   # Call periodically to keep data resident in memory (hopefully)
   def keepalive(self):
      if self.isHidden():
         self.refresh(False)
Пример #2
0
 def setupUI(self):
    self.resize(self.settings['width'], self.settings['height'])
    self.setWindowFlags(Qt.FramelessWindowHint | Qt.CustomizeWindowHint | Qt.WindowStaysOnTopHint)
    #self.setWindowFlags(Qt.X11BypassWindowManagerHint)
    self.setWindowTitle('Nemu')
    self.setMouseTracking(True)
    
    iconPath = os.path.join(os.path.dirname(__file__), 'images')
    iconPath = os.path.join(iconPath, 'nemu.png')
    self.setWindowIcon(IconCache()[iconPath])
    
    self.place()
    
    self.buttonListLayout = QVBoxLayout(self)
    self.setMargins(self.buttonListLayout)
    
    self.buttonLayout = QHBoxLayout()
    self.setMargins(self.buttonLayout)
    
    # Settings and Filter box
    self.filterLayout = QHBoxLayout()
    self.settingsButton = QPushButton()
    self.settingsButton.setIcon(QIcon(iconPath))
    self.settingsButton.setMinimumHeight(35)
    self.settingsButton.clicked.connect(self.settingsClicked)
    self.filterLayout.addWidget(self.settingsButton, 0)
    
    self.filterLabel = QLabel("Filter")
    self.filterLayout.addWidget(self.filterLabel)
    
    self.filterBox = QLineEdit()
    self.filterBox.textChanged.connect(self.refresh)
    self.filterLayout.addWidget(self.filterBox)
    
    self.sizeGrip = QSizeGrip(self)
    self.sizeGrip.setMinimumSize(QSize(25, 25))
    self.filterLayout.addWidget(self.sizeGrip, 0, Qt.AlignRight | Qt.AlignTop)
    
    self.buttonListLayout.addLayout(self.filterLayout)
    
    # Top buttons and labels
    self.backButton = QPushButton('Favorites')
    self.backButton.setMinimumHeight(35)
    self.backButton.clicked.connect(self.backClicked)
    self.buttonLayout.addWidget(self.backButton, 1)
    
    self.currentLabel = QLabel()
    self.currentLabel.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
    self.buttonLayout.addWidget(self.currentLabel, 1)
    
    self.buttonListLayout.addLayout(self.buttonLayout, 0)
    
    # Menu item display
    self.listSplitter = QSplitter()
    self.buttonListLayout.addWidget(self.listSplitter, 1)
    
    self.leftList = ListWidget(self.clearListMouseOver)
    self.listSplitter.addWidget(self.leftList)
    
    self.rightList = ListWidget(self.clearListMouseOver)
    self.listSplitter.addWidget(self.rightList)
    
    # Has to be done after adding widgets to the splitter or the size will get reset again
    if 'splitterState' in self.settings:
       self.listSplitter.restoreState(self.settings['splitterState'])
Пример #3
0
    def create_rooms(self):
        self.listWidget = ListWidget(self.centralwidget, 'Wartezimmer', self)
        self.listWidget.setGeometry(QtCore.QRect(self.offset_left, 20, 256, 192))
        self.listWidget.setObjectName("listWidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(self.offset_left, 0, 251, 16))
        self.label.setObjectName("label")
        self.waiting_rooms.append(self.listWidget)
        self.labels_waiting.append(self.label)

        self.listWidget_2 = ListWidget(self.centralwidget, 'Raum1', self)
        self.listWidget_2.setGeometry(QtCore.QRect(640, 20, 256, 192))
        self.listWidget_2.setObjectName("listWidget_2")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(640, 0, 51, 16))
        self.label_2.setObjectName("label_2")
        self.rooms.append(self.listWidget_2)
        self.labels.append(self.label_2)

        self.listWidget_3 = ListWidget(self.centralwidget, 'Raum2', self)
        self.listWidget_3.setGeometry(QtCore.QRect(900, 20, 256, 192))
        self.listWidget_3.setObjectName("listWidget_3")
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(900, 0, 61, 16))
        self.label_3.setObjectName("label_3")
        self.rooms.append(self.listWidget_3)
        self.labels.append(self.label_3)

        self.listWidget_4 = ListWidget(self.centralwidget, 'Raum3', self)
        self.listWidget_4.setGeometry(QtCore.QRect(1160, 20, 256, 192))
        self.listWidget_4.setObjectName("listWidget_3")
        self.label_4 = QtWidgets.QLabel(self.centralwidget)
        self.label_4.setGeometry(QtCore.QRect(1160, 0, 61, 16))
        self.label_4.setObjectName("label_4")
        self.rooms.append(self.listWidget_4)
        self.labels.append(self.label_4)

        self.listWidget_5 = ListWidget(self.centralwidget, 'Raum4', self)
        self.listWidget_5.setGeometry(QtCore.QRect(1420, 20, 256, 192))
        self.listWidget_5.setObjectName("listWidget_3")
        self.label_5 = QtWidgets.QLabel(self.centralwidget)
        self.label_5.setGeometry(QtCore.QRect(1420, 0, 61, 16))
        self.label_5.setObjectName("label_5")
        self.rooms.append(self.listWidget_5)
        self.labels.append(self.label_5)

        # New Line
        self.listWidget_6 = ListWidget(self.centralwidget, 'Wartezimmer2', self)
        self.listWidget_6.setGeometry(QtCore.QRect(self.offset_left, 250, 256, 192))
        self.listWidget_6.setObjectName("listWidget")
        self.label_6 = QtWidgets.QLabel(self.centralwidget)
        self.label_6.setGeometry(QtCore.QRect(self.offset_left, 230, 451, 16))
        self.label_6.setObjectName("label_6")
        self.labels_waiting.append(self.label_6)
        self.waiting_rooms.append(self.listWidget_6)

        self.listWidget_7 = ListWidget(self.centralwidget, 'Raum5', self)
        self.listWidget_7.setGeometry(QtCore.QRect(640, 250, 256, 192))
        self.listWidget_7.setObjectName("listWidget_2")
        self.label_7 = QtWidgets.QLabel(self.centralwidget)
        self.label_7.setGeometry(QtCore.QRect(640, 230, 51, 16))
        self.label_7.setObjectName("label_7")
        self.rooms.append(self.listWidget_7)
        self.labels.append(self.label_7)

        self.listWidget_8 = ListWidget(self.centralwidget, 'Raum6', self)
        self.listWidget_8.setGeometry(QtCore.QRect(900, 250, 256, 192))
        self.listWidget_8.setObjectName("listWidget_3")
        self.label_8 = QtWidgets.QLabel(self.centralwidget)
        self.label_8.setGeometry(QtCore.QRect(900, 230, 61, 16))
        self.label_8.setObjectName("label_8")
        self.rooms.append(self.listWidget_8)
        self.labels.append(self.label_8)

        self.listWidget_9 = ListWidget(self.centralwidget, 'Raum7', self)
        self.listWidget_9.setGeometry(QtCore.QRect(1160, 250, 256, 192))
        self.listWidget_9.setObjectName("listWidget_3")
        self.label_9 = QtWidgets.QLabel(self.centralwidget)
        self.label_9.setGeometry(QtCore.QRect(1160, 230, 61, 16))
        self.label_9.setObjectName("label_9")
        self.rooms.append(self.listWidget_9)
        self.labels.append(self.label_9)

        self.listWidget_10 = ListWidget(self.centralwidget, 'Raum8', self)
        self.listWidget_10.setGeometry(QtCore.QRect(1420, 250, 256, 192))
        self.listWidget_10.setObjectName("listWidget_3")
        self.label_10 = QtWidgets.QLabel(self.centralwidget)
        self.label_10.setGeometry(QtCore.QRect(1420, 230, 61, 16))
        self.label_10.setObjectName("label_10")
        self.rooms.append(self.listWidget_10)
        self.labels.append(self.label_10)

        for i in range(self.active_treatment_rooms, len(self.rooms)):
            self.rooms[i].hide()
            self.labels[i].hide()
        self.number_rooms_old = 0
        self.number_rooms = self.active_treatment_rooms

        for i in range(self.active_waiting_rooms, len(self.waiting_rooms)):
            self.waiting_rooms[i].hide()
        self.number_waiting_rooms_old = 0
        self.number_waiting_rooms = self.active_waiting_rooms
Пример #4
0
 def __init__(self):
     super().__init__()  # Llamada obligatoria al constructor del padre
     self.layout = QHBoxLayout()  # Layout horizontal
     self.list_widget = ListWidget()
     self.layout.addWidget(self.list_widget)  # Adicion al layout
     self.setLayout(self.layout)  # Fijacion del Layout
Пример #5
0
class Ui_MainWindow(object):
    current_path = "C:/Users/Administrator/Desktop/Arztpraxis"
    max_width = 0
    max_height = 0
    height_button = 0
    width_button = 0
    offset_left = 100
    active_treatment_rooms = 0
    active_waiting_rooms = 0

    def addCustomer(self):
        name, _ = QtWidgets.QInputDialog.getText(None, 'Text Eingabe', 'Patienten Name:', QtWidgets.QLineEdit.Normal, "")
        print("Added Customer", name)
        print(datetime.datetime.now().strftime('%H:%M %d.%m.%Y'))
        self.customerList.append(Customer(self.centralwidget, name, self))
        self.customerList[-1].times.append('Betreten:'+datetime.datetime.now().strftime('%H:%M %d.%m.%Y'))
        self.customerList[-1].setText(name)
        self.comboBox.addItem(self.customerList[-1].name)
        customer = QtWidgets.QListWidgetItem(self.customerList[-1].name) 
        self.listWidget.addItem(customer)

    def deleteCustomer(self):
        if len(self.customerList) > 0:
            for index, customer in enumerate(self.customerList):
                if customer.name == self.comboBox.currentText():
                    print("Deleting Customer: ", customer.name)
                    print(datetime.datetime.now().strftime('%H:%M %d.%m.%Y'))
                    self.customerList[index].times.append('Verlassen:'+datetime.datetime.now().strftime('%H:%M %d.%m.%Y'))
                    self.comboBox.removeItem(index)
                    with open(self.current_path+'/Zeiten/Data '+ datetime.datetime.now().strftime('%d-%m-%Y')+'/' +str(self.customerList[index].id)+'.txt', 'w') as f:
                        json.dump(self.customerList[index].times, f, separators=(',',':'), indent=2)
                    for room in self.rooms:
                        items = room.findItems(customer.name, QtCore.Qt.MatchExactly)
                        if len(items) > 0:
                            for item in items:
                                row = room.row(item)
                                room.takeItem(row)
                    del self.customerList[index]
                    
    def updateNames(self, customer_id, old_name):
        print("hanged Name of Customer with ID: " + str(customer_id))
        for index, customer in enumerate(self.customerList):
            if customer.id == customer_id:
                self.comboBox.setItemText(index, self.customerList[index].name)

    def roomChange(self, date, customer_name, room_name):
        for indx, customer in enumerate(self.customerList):
            if customer.name == customer_name:
                self.customerList[indx].times.append('Raumwechsel von ' + customer.act_room + ' zu ' + room_name +  ', um: ' + date) 
                customer.act_room = room_name

    def setupUi(self, MainWindow):
        MainWindow.setObjectName("Arztpraxis")
        MainWindow.resize(1920, 1080)
        MainWindow.setWindowState(QtCore.Qt.WindowMaximized)

        file_path_data = self.current_path + "/Zeiten/Data " + datetime.datetime.now().strftime('%d-%m-%Y')
        if not os.path.exists(file_path_data):
            print('Creating new Dir for today')
            os.makedirs(file_path_data)

        with open(self.current_path+'/settings.txt', 'r') as f:
            for nr, line in zip(range(2), f):
                if nr == 0:
                    self.active_treatment_rooms = int(line)
                elif nr == 1:
                    self.active_waiting_rooms = int(line)
            print('Loaded settings: ')
            print(self.active_treatment_rooms, self.active_waiting_rooms)

        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.customerList = []
        self.rooms = []
        self.waiting_rooms = []
        self.labels = []
        self.labels_waiting = []
        self.max_width = MainWindow.frameGeometry().width()
        self.max_height = MainWindow.frameGeometry().height()
        self.height_button = 41
        self.width_button = 121
        self.create_rooms()
        self.number_rooms = 0
        self.number_rooms_old = self.active_treatment_rooms
        self.number_waiting_rooms = 0
        self.number_waiting_rooms_old = self.active_waiting_rooms
        self.ui_logic()
        self.ui_setup(MainWindow)

    def menu_bar(self):
        self.settings = self.menubar.addMenu('Settings')  
        # Treatment Rooms
        self.rooms_number = QtWidgets.QAction('Behandlungszimmer', self.centralwidget)
        number = self.rooms_number.triggered.connect(lambda: self.text_input('Anzahl an Behandlungszimmer:                           '))
        self.settings.addAction(self.rooms_number)
        # Waiting Rooms
        self.waiting_rooms_number = QtWidgets.QAction('Wartezimmer', self.centralwidget)
        number = self.waiting_rooms_number.triggered.connect(lambda: self.text_input('Anzahl an Wartezimmer:                         '))
        self.settings.addAction(self.waiting_rooms_number)
        # Add Save Button for Number of Treatment and Waiting Rooms
        self.save = self.menubar.addMenu('Save')
        self.save_action = QtWidgets.QAction('Behandlungszimmer', self.centralwidget)
        self.save_action.triggered.connect(lambda: self.save_settings())
        self.save.addAction(self.save_action)

    def save_settings(self):
        print('Trigger save settings')
        self.active_treatment_rooms = sum([room.isVisible() for room in self.rooms])
        self.active_waiting_rooms = sum([waiting_room.isVisible() for waiting_room in self.waiting_rooms])
        print(self.active_treatment_rooms, self.active_waiting_rooms)
        with open(self.current_path+'/settings.txt', 'w') as f:
            f.write(str(self.active_treatment_rooms))
            f.write("\n")
            f.write(str(self.active_waiting_rooms))

    def text_input(self, question):
        if 'Wartezimmer' in question:
            input_text, _ = QtWidgets.QInputDialog.getText(self.centralwidget, 'Zahlen Eingabe (1-2)', question, QtWidgets.QLineEdit.Normal)
            if input_text != "" and input_text.isdigit():
                self.number_waiting_rooms = int(input_text)
                self.reshape_waiting_rooms()
        elif 'Behandlung' in question:
            input_text, _ = QtWidgets.QInputDialog.getText(self.centralwidget, 'Zahlen Eingabe (1-10)', question, QtWidgets.QLineEdit.Normal)
            if input_text != "" and input_text.isdigit():
                self.number_rooms = int(input_text)
                self.reshape_rooms()

    def ui_setup(self, MainWindow):
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 962, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
        self.menu_bar()

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "Arztpraxis"))
        self.label.setText(_translate("MainWindow", "Wartezimmer"))
        self.label_2.setText(_translate("MainWindow", "Raum 1"))
        self.label_3.setText(_translate("MainWindow", "Raum 2"))
        self.label_4.setText(_translate("MainWindow", "Raum 3"))
        self.label_5.setText(_translate("MainWindow", "Raum 4"))
        self.label_6.setText(_translate("MainWindow", "Wartezimmer 2"))
        self.label_7.setText(_translate("MainWindow", "Raum 5"))
        self.label_8.setText(_translate("MainWindow", "Raum 6"))
        self.label_9.setText(_translate("MainWindow", "Raum 7"))
        self.label_10.setText(_translate("MainWindow", "Raum 8"))
        self.pushButton.setText(_translate("MainWindow", "Patient erstellen"))
        self.pushButton_2.setText(_translate("MainWindow", "Patient löschen"))

    def create_rooms(self):
        self.listWidget = ListWidget(self.centralwidget, 'Wartezimmer', self)
        self.listWidget.setGeometry(QtCore.QRect(self.offset_left, 20, 256, 192))
        self.listWidget.setObjectName("listWidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(self.offset_left, 0, 251, 16))
        self.label.setObjectName("label")
        self.waiting_rooms.append(self.listWidget)
        self.labels_waiting.append(self.label)

        self.listWidget_2 = ListWidget(self.centralwidget, 'Raum1', self)
        self.listWidget_2.setGeometry(QtCore.QRect(640, 20, 256, 192))
        self.listWidget_2.setObjectName("listWidget_2")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(640, 0, 51, 16))
        self.label_2.setObjectName("label_2")
        self.rooms.append(self.listWidget_2)
        self.labels.append(self.label_2)

        self.listWidget_3 = ListWidget(self.centralwidget, 'Raum2', self)
        self.listWidget_3.setGeometry(QtCore.QRect(900, 20, 256, 192))
        self.listWidget_3.setObjectName("listWidget_3")
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(900, 0, 61, 16))
        self.label_3.setObjectName("label_3")
        self.rooms.append(self.listWidget_3)
        self.labels.append(self.label_3)

        self.listWidget_4 = ListWidget(self.centralwidget, 'Raum3', self)
        self.listWidget_4.setGeometry(QtCore.QRect(1160, 20, 256, 192))
        self.listWidget_4.setObjectName("listWidget_3")
        self.label_4 = QtWidgets.QLabel(self.centralwidget)
        self.label_4.setGeometry(QtCore.QRect(1160, 0, 61, 16))
        self.label_4.setObjectName("label_4")
        self.rooms.append(self.listWidget_4)
        self.labels.append(self.label_4)

        self.listWidget_5 = ListWidget(self.centralwidget, 'Raum4', self)
        self.listWidget_5.setGeometry(QtCore.QRect(1420, 20, 256, 192))
        self.listWidget_5.setObjectName("listWidget_3")
        self.label_5 = QtWidgets.QLabel(self.centralwidget)
        self.label_5.setGeometry(QtCore.QRect(1420, 0, 61, 16))
        self.label_5.setObjectName("label_5")
        self.rooms.append(self.listWidget_5)
        self.labels.append(self.label_5)

        # New Line
        self.listWidget_6 = ListWidget(self.centralwidget, 'Wartezimmer2', self)
        self.listWidget_6.setGeometry(QtCore.QRect(self.offset_left, 250, 256, 192))
        self.listWidget_6.setObjectName("listWidget")
        self.label_6 = QtWidgets.QLabel(self.centralwidget)
        self.label_6.setGeometry(QtCore.QRect(self.offset_left, 230, 451, 16))
        self.label_6.setObjectName("label_6")
        self.labels_waiting.append(self.label_6)
        self.waiting_rooms.append(self.listWidget_6)

        self.listWidget_7 = ListWidget(self.centralwidget, 'Raum5', self)
        self.listWidget_7.setGeometry(QtCore.QRect(640, 250, 256, 192))
        self.listWidget_7.setObjectName("listWidget_2")
        self.label_7 = QtWidgets.QLabel(self.centralwidget)
        self.label_7.setGeometry(QtCore.QRect(640, 230, 51, 16))
        self.label_7.setObjectName("label_7")
        self.rooms.append(self.listWidget_7)
        self.labels.append(self.label_7)

        self.listWidget_8 = ListWidget(self.centralwidget, 'Raum6', self)
        self.listWidget_8.setGeometry(QtCore.QRect(900, 250, 256, 192))
        self.listWidget_8.setObjectName("listWidget_3")
        self.label_8 = QtWidgets.QLabel(self.centralwidget)
        self.label_8.setGeometry(QtCore.QRect(900, 230, 61, 16))
        self.label_8.setObjectName("label_8")
        self.rooms.append(self.listWidget_8)
        self.labels.append(self.label_8)

        self.listWidget_9 = ListWidget(self.centralwidget, 'Raum7', self)
        self.listWidget_9.setGeometry(QtCore.QRect(1160, 250, 256, 192))
        self.listWidget_9.setObjectName("listWidget_3")
        self.label_9 = QtWidgets.QLabel(self.centralwidget)
        self.label_9.setGeometry(QtCore.QRect(1160, 230, 61, 16))
        self.label_9.setObjectName("label_9")
        self.rooms.append(self.listWidget_9)
        self.labels.append(self.label_9)

        self.listWidget_10 = ListWidget(self.centralwidget, 'Raum8', self)
        self.listWidget_10.setGeometry(QtCore.QRect(1420, 250, 256, 192))
        self.listWidget_10.setObjectName("listWidget_3")
        self.label_10 = QtWidgets.QLabel(self.centralwidget)
        self.label_10.setGeometry(QtCore.QRect(1420, 230, 61, 16))
        self.label_10.setObjectName("label_10")
        self.rooms.append(self.listWidget_10)
        self.labels.append(self.label_10)

        for i in range(self.active_treatment_rooms, len(self.rooms)):
            self.rooms[i].hide()
            self.labels[i].hide()
        self.number_rooms_old = 0
        self.number_rooms = self.active_treatment_rooms

        for i in range(self.active_waiting_rooms, len(self.waiting_rooms)):
            self.waiting_rooms[i].hide()
        self.number_waiting_rooms_old = 0
        self.number_waiting_rooms = self.active_waiting_rooms

    def reshape_rooms(self):
        if self.number_rooms > len(self.rooms):
            self.number_rooms = len(self.rooms)
        print('Reshape Treatment Rooms from: ', self.number_rooms_old, ' to: ', self.number_rooms)
        if self.number_rooms_old > self.number_rooms:
            for indx in range(self.number_rooms, self.number_rooms_old):
                self.rooms[indx].hide()
                self.labels[indx].hide()
            self.number_rooms_old = self.number_rooms
        elif self.number_rooms_old < self.number_rooms:
            for indx in range(self.number_rooms_old, self.number_rooms):
                self.rooms[indx].show()
                self.labels[indx].show()
            self.number_rooms_old = self.number_rooms

    def reshape_waiting_rooms(self):
        if self.number_waiting_rooms > len(self.waiting_rooms):
            self.number_waiting_rooms = len(self.waiting_rooms)
        print('Reshape Treatment Rooms from: ', self.number_waiting_rooms_old, ' to: ', self.number_waiting_rooms)
        if self.number_waiting_rooms_old > self.number_waiting_rooms:
            for indx in range(self.number_waiting_rooms, self.number_waiting_rooms_old):
                self.waiting_rooms[indx].hide()
                self.labels_waiting[indx].hide()
            self.number_waiting_rooms_old = self.number_waiting_rooms
        elif self.number_waiting_rooms_old < self.number_waiting_rooms:
            for indx in range(self.number_waiting_rooms_old, self.number_waiting_rooms):
                self.waiting_rooms[indx].show()
                self.labels_waiting[indx].show()
            self.number_waiting_rooms_old = self.number_waiting_rooms

    def ui_logic(self):
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        print(self.max_height)
        print(self.max_width)
        self.pushButton.setGeometry(QtCore.QRect(self.width_button, self.max_height -  5 * self.height_button, self.width_button, self.height_button))
        self.pushButton.setObjectName("pushButton")
        self.pushButton.clicked.connect(self.addCustomer)

        self.comboBox = QtWidgets.QComboBox(self.centralwidget)
        self.comboBox.setGeometry(QtCore.QRect(self.max_width - 4 * self.width_button, self.max_height - 6 * self.height_button, self.width_button, self.height_button))
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(self.max_width - 4 * self.width_button, self.max_height -  5 * self.height_button, self.width_button, self.height_button))
        self.pushButton_2.setObjectName("pushButton_2")
        self.pushButton_2.clicked.connect(self.deleteCustomer)