From 00a1292e3d2561403a3ce9e088bd875773cd4edf Mon Sep 17 00:00:00 2001 From: MWGuy Date: Fri, 16 Nov 2018 20:49:09 +0300 Subject: [PATCH] update: add settings --- ide/misc/languages/en/messages.ini | 5 +- ide/misc/languages/ru/messages.ini | 5 +- ide/src/.theme/dark.css | 4 + ide/src/.theme/style.css | 9 +-- ide/src/ide/Ide.php | 10 +++ ide/src/ide/IdeStandardExtension.php | 4 +- .../ide/autocomplete/ui/AutoCompletePane.php | 3 - ide/src/ide/forms/IdeSettingsForm.php | 2 + ide/src/ide/settings/ExtensionsSettings.php | 78 +++++++++++++++++++ ide/src/ide/settings/IdeSettings.php | 36 ++++++++- ide/src/ide/themes/ThemeManager.php | 7 ++ 11 files changed, 146 insertions(+), 17 deletions(-) create mode 100644 ide/src/ide/settings/ExtensionsSettings.php diff --git a/ide/misc/languages/en/messages.ini b/ide/misc/languages/en/messages.ini index a5d6d60..631db37 100644 --- a/ide/misc/languages/en/messages.ini +++ b/ide/misc/languages/en/messages.ini @@ -1019,8 +1019,11 @@ wizard.x.gravity.ver=Gravity by Y (vertical) wizard.x.position=X Position wizard.y.position=Y Position ide.settings.ide=IDE Settings +ide.settings.ide.themes=IDE Theme: +ide.settings.extensions=Extensions ide.settings.save=Save ide.settings.close=Close ide.settings.default=To default ide.settings.default.question=Make default settings ? -ide.settings.save.question=Save settings ? \ No newline at end of file +ide.settings.save.question=Save settings ? +ide.settings.restart.question=Restart IDE ? \ No newline at end of file diff --git a/ide/misc/languages/ru/messages.ini b/ide/misc/languages/ru/messages.ini index ab8c3e0..7af3a8e 100644 --- a/ide/misc/languages/ru/messages.ini +++ b/ide/misc/languages/ru/messages.ini @@ -1019,8 +1019,11 @@ wizard.x.gravity.ver=Гравитация по Y (вертикальная) wizard.x.position=Позиция X wizard.y.position=Позиция Y ide.settings.ide=Настройки IDE +ide.settings.ide.themes=Тема IDE: +ide.settings.extensions=Разширения ide.settings.save=Сохранить ide.settings.close=Закрыть ide.settings.default=По умолчанию ide.settings.default.question=Сбросить настройки ? -ide.settings.save.question=Сохранить настройки ? \ No newline at end of file +ide.settings.save.question=Сохранить настройки ? +ide.settings.restart.question=Перезапустить IDE ? \ No newline at end of file diff --git a/ide/src/.theme/dark.css b/ide/src/.theme/dark.css index eef2d0e..35d4e02 100644 --- a/ide/src/.theme/dark.css +++ b/ide/src/.theme/dark.css @@ -366,4 +366,8 @@ combo-box-base:editable:focused > .text-field, .dn-console-list { -fx-border-width: 0; +} + +.dn-autocomplete { + -fx-text-fill: #fff; } \ No newline at end of file diff --git a/ide/src/.theme/style.css b/ide/src/.theme/style.css index fff25f0..f6862dd 100644 --- a/ide/src/.theme/style.css +++ b/ide/src/.theme/style.css @@ -149,9 +149,8 @@ -fx-line-spacing: 30px; } -.dn-autocomplete { - -fx-border-width: 0px; - -fx-border-color: #dddddd; +.dn-autocomplete .list-cell:selected { + -fx-background-color: #82adf220; } .dn-autocomplete-description { @@ -405,6 +404,4 @@ combo-box-base:editable:focused > .text-field, .styled-text-area { -fx-font-size: 14; -} - -.list-cell:selected { -fx-background-color: #82adf220;} \ No newline at end of file +} \ No newline at end of file diff --git a/ide/src/ide/Ide.php b/ide/src/ide/Ide.php index 3b2cb5f..5c570c2 100644 --- a/ide/src/ide/Ide.php +++ b/ide/src/ide/Ide.php @@ -16,6 +16,7 @@ use ide\project\AbstractProjectTemplate; use ide\project\control\AbstractProjectControlPane; use ide\project\Project; +use ide\settings\ExtensionsSettings; use ide\settings\IdeSettings; use ide\settings\SettingsContainer; use ide\systems\Cache; @@ -183,6 +184,7 @@ public function __construct($configPath = null) $this->settingsContainer = new SettingsContainer(); $this->settingsContainer->register(new IdeSettings()); + $this->settingsContainer->register(new ExtensionsSettings()); $this->asyncThreadPool = ThreadPool::createCached(); } @@ -1601,4 +1603,12 @@ public function getSettingsContainer(): SettingsContainer { return $this->settingsContainer; } + + /** + * @return AbstractExtension[] + */ + public function getExtensions(): array + { + return $this->extensions; + } } \ No newline at end of file diff --git a/ide/src/ide/IdeStandardExtension.php b/ide/src/ide/IdeStandardExtension.php index a4c9416..6fe5491 100644 --- a/ide/src/ide/IdeStandardExtension.php +++ b/ide/src/ide/IdeStandardExtension.php @@ -59,7 +59,7 @@ public function onIdeShutdown() public function getName(): string { - return Ide::get()->getName(); + return "IDE Platform"; } public function getAuthor(): string @@ -74,7 +74,7 @@ public function getVersion(): string public function getIcon32(): string { - return null; + return "logo.png"; } public function isSystem(): bool diff --git a/ide/src/ide/autocomplete/ui/AutoCompletePane.php b/ide/src/ide/autocomplete/ui/AutoCompletePane.php index 562f562..96da50c 100644 --- a/ide/src/ide/autocomplete/ui/AutoCompletePane.php +++ b/ide/src/ide/autocomplete/ui/AutoCompletePane.php @@ -799,7 +799,6 @@ private function makeUi() $list->maxHeight = 9999; $list->fixedCellSize = 20; $list->classes->addAll(['hide-hor-scroll', 'dn-console-list', 'dn-autocomplete']); - $list->style = '-fx-background-insets: 0; -fx-focus-color: -fx-control-inner-background; -fx-faint-focus-color: -fx-control-inner-background;'; $list->width = 400; $ui->add($list); @@ -820,8 +819,6 @@ private function makeUi() $win = new UXPopupWindow(); $win->layout = $ui; - /*$win->style = 'TRANSPARENT'; - $win->opacity = 0.7;*/ $v = function () { $offsetY = 0; diff --git a/ide/src/ide/forms/IdeSettingsForm.php b/ide/src/ide/forms/IdeSettingsForm.php index b9a3175..4346c99 100644 --- a/ide/src/ide/forms/IdeSettingsForm.php +++ b/ide/src/ide/forms/IdeSettingsForm.php @@ -4,6 +4,8 @@ use ide\Ide; use ide\settings\AbstractSettings; +use ide\systems\DialogSystem; +use php\gui\UXAlert; use php\gui\UXButton; use php\gui\UXTab; use php\gui\UXTabPane; diff --git a/ide/src/ide/settings/ExtensionsSettings.php b/ide/src/ide/settings/ExtensionsSettings.php new file mode 100644 index 0000000..ccb43c5 --- /dev/null +++ b/ide/src/ide/settings/ExtensionsSettings.php @@ -0,0 +1,78 @@ +setCellFactory(function (UXListCell $cell, AbstractExtension $extension) { + if ($extension) { + $titleName = new UXLabel($extension->getName() . " " . $extension->getVersion()); + $titleName->style = '-fx-font-weight: bold;'; + + if ($extension->isSystem()) + $titleName->text .= " (system)"; + + $titleDescription = new UXLabel($extension->getAuthor()); + $titleDescription->opacity = 0.7; + + $title = new UXVBox([$titleName, $titleDescription]); + $title->spacing = 0; + + $line = new UXHBox([Ide::getImage($extension->getIcon32(), [32, 32]), $title]); + $line->spacing = 7; + $line->padding = 5; + $cell->text = null; + $cell->graphic = $line; + } + }); + + foreach (Ide::get()->getExtensions() as $extension) $list->items->add($extension); + + return $list; + } + + public function save(): void + { + // noup + } + + public function toDefault(): void + { + // noup + } +} \ No newline at end of file diff --git a/ide/src/ide/settings/IdeSettings.php b/ide/src/ide/settings/IdeSettings.php index a37962b..132b9c0 100644 --- a/ide/src/ide/settings/IdeSettings.php +++ b/ide/src/ide/settings/IdeSettings.php @@ -2,12 +2,22 @@ namespace ide\settings; - +use ide\Ide; +use ide\themes\LightTheme; +use php\gui\layout\UXHBox; +use php\gui\layout\UXVBox; +use php\gui\UXComboBox; use php\gui\UXLabel; use php\gui\UXNode; +use php\gui\UXSeparator; class IdeSettings extends AbstractSettings { + /** + * @var UXComboBox + */ + private $themesList; + /** * @return string */ @@ -29,16 +39,34 @@ public function getIcon16(): string */ public function getNode(): UXNode { - return new UXLabel("Soon ...."); + $box = new UXVBox(); + $box->add($hb = new UXHBox([ + new UXLabel(_("ide.settings.ide.themes")), $this->themesList = new UXComboBox() + ])); + + $box->spacing = $box->padding = $hb->spacing = 8; + $hb->alignment = "CENTER_LEFT"; + $hb->maxHeight = 150; + $box->add(new UXSeparator()); + + $this->themesList->value = Ide::get()->getThemeManager()->getDefault()->getName(); + foreach (Ide::get()->getThemeManager()->getAll() as $theme) $this->themesList->items->add($theme->getName()); + + return $box; } public function save(): void { - alert("save"); + if ($this->themesList->value) + Ide::get()->setUserConfigValue("ide.theme", $this->themesList->value); + + if (uiConfirm(_("ide.settings.restart.question"))) Ide::get()->restart(); } public function toDefault(): void { - alert("def"); + Ide::get()->setUserConfigValue("ide.theme", (new LightTheme())->getName()); + + if (uiConfirm(_("ide.settings.restart.question"))) Ide::get()->restart(); } } \ No newline at end of file diff --git a/ide/src/ide/themes/ThemeManager.php b/ide/src/ide/themes/ThemeManager.php index 3b16837..9b1a116 100644 --- a/ide/src/ide/themes/ThemeManager.php +++ b/ide/src/ide/themes/ThemeManager.php @@ -46,4 +46,11 @@ public function getDefault(): ?AbstractTheme { return $this->get($this->default); } + + /** + * @return AbstractTheme[] + */ + public function getAll() : array { + return $this->themes; + } } \ No newline at end of file