feat: CI/CD pipeline setup complete - Ansible playbooks updated, secrets configured, workflow ready
This commit is contained in:
@@ -8,6 +8,7 @@ use App\Framework\Console\CommandHistory;
|
||||
use App\Framework\Console\ConsoleColor;
|
||||
use App\Framework\Console\ConsoleOutputInterface;
|
||||
use App\Framework\Console\HistoryTab;
|
||||
use App\Framework\Console\Layout\TerminalSize;
|
||||
use App\Framework\Console\Screen\CursorControlCode;
|
||||
use App\Framework\Console\Screen\ScreenControlCode;
|
||||
use App\Framework\Console\TuiView;
|
||||
@@ -18,9 +19,13 @@ use App\Framework\Discovery\ValueObjects\DiscoveredAttribute;
|
||||
*/
|
||||
final readonly class TuiRenderer
|
||||
{
|
||||
private MenuBar $menuBar;
|
||||
|
||||
public function __construct(
|
||||
private ConsoleOutputInterface $output
|
||||
) {
|
||||
// Initialize menu bar with default items
|
||||
$this->menuBar = new MenuBar(['Datei', 'Bearbeiten', 'Ansicht', 'Hilfe']);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -29,8 +34,17 @@ final readonly class TuiRenderer
|
||||
public function render(TuiState $state, CommandHistory $history): void
|
||||
{
|
||||
$this->clearScreen();
|
||||
$this->renderHeader();
|
||||
|
||||
// Get terminal size for layout
|
||||
$terminalSize = TerminalSize::detect();
|
||||
|
||||
// Render menu bar at top
|
||||
$this->renderMenuBar($state, $terminalSize->width);
|
||||
|
||||
// Render header (or skip if menu bar replaces it)
|
||||
// $this->renderHeader();
|
||||
|
||||
// Render main content
|
||||
match ($state->getCurrentView()) {
|
||||
TuiView::CATEGORIES => $this->renderCategories($state),
|
||||
TuiView::COMMANDS => $this->renderCommands($state),
|
||||
@@ -40,6 +54,9 @@ final readonly class TuiRenderer
|
||||
TuiView::DASHBOARD => $this->renderDashboard($state),
|
||||
TuiView::HELP => $this->renderHelp($state),
|
||||
};
|
||||
|
||||
// Render status line at bottom
|
||||
$this->renderStatusLine($state, $terminalSize->width);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -443,4 +460,41 @@ final readonly class TuiRenderer
|
||||
|
||||
return floor($diff / 86400) . "d ago";
|
||||
}
|
||||
|
||||
/**
|
||||
* Render menu bar at the top
|
||||
*/
|
||||
private function renderMenuBar(TuiState $state, int $screenWidth): void
|
||||
{
|
||||
$this->menuBar->render($this->output, $state->getActiveMenu(), $screenWidth);
|
||||
}
|
||||
|
||||
/**
|
||||
* Render status line at the bottom
|
||||
*/
|
||||
private function renderStatusLine(TuiState $state, int $screenWidth): void
|
||||
{
|
||||
$statusText = $state->getStatus();
|
||||
|
||||
// Default status if empty
|
||||
if ($statusText === '') {
|
||||
$statusText = 'Bereit';
|
||||
}
|
||||
|
||||
// Move cursor to last line
|
||||
$terminalSize = TerminalSize::detect();
|
||||
$this->output->write(CursorControlCode::POSITION->format($terminalSize->height, 1));
|
||||
|
||||
// Render status line with separator
|
||||
$this->output->writeLine(str_repeat('─', $screenWidth), ConsoleColor::GRAY);
|
||||
$this->output->writeLine($statusText, ConsoleColor::BRIGHT_BLUE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get menu bar instance
|
||||
*/
|
||||
public function getMenuBar(): MenuBar
|
||||
{
|
||||
return $this->menuBar;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user