         NSLayoutConstraint.activate([leading, trailing, top, bottom])
     }
     
-    // MARK: - Override
-    
-    override func layoutSubviews() {
-        super.layoutSubviews()
-        
-        updateContentLayout()
-    }
-    
-    override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
-        let hitView = super.hitTest(point, with: event)
-        
-        let filter = hitView?.superview == filterStack
-        let menu = hitView?.superview == menuStack
-        if !filter && !menu && forwardTouchesButton.isSelected {
-            return nil
-        }
-        
-        return hitView
-    }
-    
-    override var canBecomeFirstResponder : Bool {
-        return true
-    }
-    
-    override func motionEnded(_ motion: UIEventSubtype, with event: UIEvent?) {
-        if motion == .motionShake {
-            if config.isShakeGestureEnabled {
-                toggleUI()
+}
+
+// MARK: - Actions
+
+extension View {
+    
+    func didTapToggleToolbarButton(_ sender: UIButton) {
+        toggleToolbar()
+    }
+    
+    func didTapForwardTouchesButton(_ sender: UIButton) {
+        forwardTouchesButton.isSelected = !forwardTouchesButton.isSelected
+        aelog("Forward Touches [\(forwardTouchesButton.isSelected)]")
+    }
+    
+    func didTapAutoFollowButton(_ sender: UIButton) {
+        autoFollowButton.isSelected = !autoFollowButton.isSelected
+        aelog("Auto Follow [\(autoFollowButton.isSelected)]")
+    }
+    
+    func didTapClearLogButton(_ sender: UIButton) {
+        brain.clearLog()
+    }
+    
+    func didTapExportButton(_ sender: UIButton) {
+        brain.exportAllLogLines()
+    }
+    
+    func didTapFilterClearButton(_ sender: UIButton) {
+        textField.resignFirstResponder()
+        if !brain.isEmpty(textField.text) {
+            brain.filterText = nil
+        }
+        textField.text = nil
+    }
+    
+    func didRecognizeUpdateOpacityGesture(_ sender: UIPanGestureRecognizer) {
+        if sender.state == .ended {
+            if isToolbarActive {
+                let xTranslation = sender.translation(in: menuView).x
+                if abs(xTranslation) > (3 * Layout.MagicNumber) {
+                    let location = sender.location(in: menuView)
+                    let opacity = opacityForLocation(location)
+                    self.opacity = opacity
+                }
             }
         }
     }
     
+    func didRecognizeHideConsoleGesture(_ sender: UITapGestureRecognizer) {
+        toggleUI()
+    }
+    
+    // MARK: - Helpers
+    
+    private func opacityForLocation(_ location: CGPoint) -> CGFloat {
+        let calculatedOpacity = ((location.x * 1.0) / 300)
+        let minOpacity = max(0.1, calculatedOpacity)
+        let maxOpacity = min(0.9, minOpacity)
+        return maxOpacity
+    }
+    
+    private func toggleToolbar() {
+        filterViewTop.constant = isToolbarActive ? Layout.FilterCollapsedTop : Layout.FilterExpandedTop
+        menuViewLeading.constant = isToolbarActive ? Layout.MenuCollapsedLeading : Layout.MenuExpandedLeading
+        let alpha: CGFloat = isToolbarActive ? 0.3 : 1.0
+        
+        UIView.animate(withDuration: 0.3, animations: {
+            self.filterView.alpha = alpha
+            self.menuView.alpha = alpha
+            self.filterView.layoutIfNeeded()
+            self.menuView.layoutIfNeeded()
+        })
+        
+        if isToolbarActive {
+            textField.resignFirstResponder()
+        }
+        
+        isToolbarActive = !isToolbarActive
+    }
+    
 }

            scrollToBottom()
        }
    }
    
    private func updateLinesCountLabels() {
        linesTotalLabel.text = "□ \(brain.lines.count)"

    // MARK: - Outlets
    
    let tableView = UITableView()
    let textField = UITextField()
    
    fileprivate let filterView = UIView()
    fileprivate let filterStack = UIStackView()
    fileprivate var filterViewTop: NSLayoutConstraint!
    
    fileprivate let exportLogButton = UIButton()
    fileprivate let linesCountStack = UIStackView()
    fileprivate let linesTotalLabel = UILabel()
    fileprivate let linesFilteredLabel = UILabel()
    fileprivate let clearFilterButton = UIButton()
    
    fileprivate let menuView = UIView()
    fileprivate let menuStack = UIStackView()
    fileprivate var menuViewLeading: NSLayoutConstraint!
    
    fileprivate let toggleToolbarButton = UIButton()
    fileprivate let forwardTouchesButton = UIButton()
    fileprivate let autoFollowButton = UIButton()
    fileprivate let clearLogButton = UIButton()
    
    fileprivate let updateOpacityGesture = UIPanGestureRecognizer()
    fileprivate let hideConsoleGesture = UITapGestureRecognizer()
    
    // MARK: - Properties
    
    var isOnScreen = false {
        didSet {
