mirror of
https://github.com/edeproject/ede.git
synced 2023-08-10 21:13:03 +03:00
352 lines
11 KiB
C++
352 lines
11 KiB
C++
|
/*
|
||
|
* $Id$
|
||
|
*
|
||
|
* edewm (EDE Window Manager) settings
|
||
|
* Part of Equinox Desktop Environment (EDE).
|
||
|
* Copyright (c) 2000-2006 EDE Authors.
|
||
|
*
|
||
|
* This program is licenced under terms of the
|
||
|
* GNU General Public Licence version 2 or newer.
|
||
|
* See COPYING for details.
|
||
|
*/
|
||
|
|
||
|
#include "ewmconf.h"
|
||
|
#include "ewm.h"
|
||
|
|
||
|
#include <fltk/file_chooser.h>
|
||
|
#include <fltk/ColorChooser.h>
|
||
|
#include <fltk/run.h>
|
||
|
#include <fltk/ask.h>
|
||
|
|
||
|
#include <string.h>
|
||
|
#include <stdlib.h>
|
||
|
|
||
|
#include "../edelib2/NLS.h"
|
||
|
|
||
|
fltk::Button* titlebarLabelColorButton;
|
||
|
fltk::Button* titlebarColorButton;
|
||
|
fltk::Button* titlebarActiveLabelColorButton;
|
||
|
fltk::Button* titlebarActiveColorButton;
|
||
|
fltk::Choice* titlebarDrawGrad;
|
||
|
fltk::CheckButton* useThemeButton;
|
||
|
fltk::Input* themePathInput;
|
||
|
fltk::Button* browse_btn;
|
||
|
fltk::CheckButton* animateButton;
|
||
|
fltk::ValueSlider* animateSlider;
|
||
|
fltk::CheckButton* opaqueResize;
|
||
|
|
||
|
fltk::Button* applyButton;
|
||
|
|
||
|
bool conf_changed = false;
|
||
|
|
||
|
|
||
|
// Functions called by callbacks
|
||
|
|
||
|
void changeBoxColor(fltk::Button *box) {
|
||
|
fltk::Button *colorBox = box;
|
||
|
fltk::Color oldColor = colorBox->color();
|
||
|
fltk::Color defColor = oldColor;
|
||
|
fltk::color_chooser("Choose color", defColor);
|
||
|
if ( defColor != oldColor ) {
|
||
|
colorBox->color(defColor);
|
||
|
colorBox->redraw();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void confChanged() {
|
||
|
if (conf_changed) return;
|
||
|
conf_changed=true;
|
||
|
applyButton->activate();
|
||
|
}
|
||
|
|
||
|
|
||
|
// Callback functions
|
||
|
|
||
|
static void cb_Text(fltk::Choice* o, void*) {
|
||
|
title_align = (int)o->value();
|
||
|
confChanged();
|
||
|
}
|
||
|
|
||
|
static void cb_Height(fltk::ValueInput* o, void*) {
|
||
|
title_height = (int)o->value();
|
||
|
confChanged();
|
||
|
}
|
||
|
|
||
|
static void cb_titlebarLabelColorButton(fltk::Button*, void*) {
|
||
|
changeBoxColor(titlebarLabelColorButton);
|
||
|
title_normal_color_text = (int) titlebarLabelColorButton->color();
|
||
|
confChanged();
|
||
|
}
|
||
|
|
||
|
static void cb_titlebarColorButton(fltk::Button*, void*) {
|
||
|
changeBoxColor(titlebarColorButton);
|
||
|
title_normal_color = (int) titlebarColorButton->color();
|
||
|
confChanged();
|
||
|
}
|
||
|
|
||
|
static void cb_titlebarActiveLabelColorButton(fltk::Button*, void*) {
|
||
|
changeBoxColor(titlebarActiveLabelColorButton);
|
||
|
title_active_color_text = (int) titlebarActiveLabelColorButton->color();
|
||
|
confChanged();
|
||
|
}
|
||
|
|
||
|
static void cb_titlebarActiveColorButton(fltk::Button*, void*) {
|
||
|
changeBoxColor(titlebarActiveColorButton);
|
||
|
title_active_color = (int) titlebarActiveColorButton->color();
|
||
|
confChanged();
|
||
|
}
|
||
|
|
||
|
static void cb_titlebarDrawGrad(fltk::Choice*, void*) {
|
||
|
title_draw_grad = titlebarDrawGrad->value();
|
||
|
confChanged();
|
||
|
}
|
||
|
|
||
|
static void cb_useThemeButton(fltk::CheckButton*, void*) {
|
||
|
if (useThemeButton->value()) {
|
||
|
themePathInput->activate();
|
||
|
browse_btn->activate();
|
||
|
titlebarDrawGrad->deactivate();
|
||
|
titlebarColorButton->deactivate();
|
||
|
titlebarActiveColorButton->deactivate();
|
||
|
} else {
|
||
|
themePathInput->deactivate();
|
||
|
browse_btn->deactivate();
|
||
|
titlebarDrawGrad->activate();
|
||
|
titlebarColorButton->activate();
|
||
|
titlebarActiveColorButton->activate();
|
||
|
}
|
||
|
|
||
|
use_theme = useThemeButton->value();
|
||
|
confChanged();
|
||
|
}
|
||
|
|
||
|
static void cb_themePathInput(fltk::Input*, void*) {
|
||
|
theme_path = (char*)realloc(theme_path, strlen(themePathInput->value()));
|
||
|
strcpy(theme_path, themePathInput->value());
|
||
|
confChanged();
|
||
|
}
|
||
|
|
||
|
static void cb_browse_btn(fltk::Button*, void*) {
|
||
|
char *file_types = _("Themes (*.theme), *.theme, All files (*.*), *");
|
||
|
const char *fileName = fltk::file_chooser( "Themes...", file_types, themePathInput->value());
|
||
|
if (fileName) {
|
||
|
themePathInput->value(fileName);
|
||
|
strncpy(theme_path, fileName, strlen(fileName));
|
||
|
}
|
||
|
confChanged();
|
||
|
}
|
||
|
|
||
|
static void cb_animateButton(fltk::CheckButton*, void*) {
|
||
|
if (animateButton->value())
|
||
|
animateSlider->activate();
|
||
|
else
|
||
|
animateSlider->deactivate();
|
||
|
animate = animateButton->value();
|
||
|
confChanged();
|
||
|
}
|
||
|
|
||
|
static void cb_animateSlider(fltk::ValueSlider*, void*) {
|
||
|
animate_speed = (int)animateSlider->value();
|
||
|
confChanged();
|
||
|
}
|
||
|
|
||
|
static void cb_opaqueResize(fltk::CheckButton*, void*) {
|
||
|
opaque_resize = opaqueResize->value();
|
||
|
confChanged();
|
||
|
}
|
||
|
|
||
|
/*static void cb_OK(fltk::Button*, void*) {
|
||
|
writeConfiguration();
|
||
|
applyConfiguration();
|
||
|
exit(0);
|
||
|
}*/
|
||
|
|
||
|
static void cb_Apply(fltk::Button*, void*) {
|
||
|
writeConfiguration();
|
||
|
applyConfiguration();
|
||
|
conf_changed = false;
|
||
|
applyButton->deactivate();
|
||
|
}
|
||
|
|
||
|
static void cb_Close(fltk::Button*, void*) {
|
||
|
if (conf_changed) {
|
||
|
int answer = fltk::choice_alert(_("You have unsaved changes in this window!\nDo you want to close it anyway?"), 0, _("Go &Back"), _("&Discard Changes"));
|
||
|
if (answer == 1) return;
|
||
|
}
|
||
|
exit(0);
|
||
|
}
|
||
|
|
||
|
|
||
|
// Main window design
|
||
|
|
||
|
int main (int argc, char **argv) {
|
||
|
|
||
|
fltk::Window* w;
|
||
|
//fl_init_locale_support("ewmconf", PREFIX"/share/locale");
|
||
|
readConfiguration();
|
||
|
{fltk::Window* o = new fltk::Window(325, 385, _("Window manager settings"));
|
||
|
w = o;
|
||
|
o->set_vertical();
|
||
|
o->begin();
|
||
|
{fltk::TabGroup* o = new fltk::TabGroup(10, 10, 305, 330);
|
||
|
o->selection_color(o->color());
|
||
|
o->selection_textcolor(o->textcolor());
|
||
|
o->box(fltk::THIN_UP_BOX);
|
||
|
o->begin();
|
||
|
{fltk::Group* o = new fltk::Group(0, 25, 305, 305, _("&Titlebar"));
|
||
|
o->align(fltk::ALIGN_TOP|fltk::ALIGN_LEFT);
|
||
|
o->begin();
|
||
|
{fltk::Choice* o = new fltk::Choice(35, 30, 125, 25, _("Text align:"));
|
||
|
o->callback((fltk::Callback*)cb_Text);
|
||
|
o->align(fltk::ALIGN_TOP|fltk::ALIGN_LEFT);
|
||
|
o->begin();
|
||
|
new fltk::Item(_("Left"));
|
||
|
new fltk::Item(_("Right"));
|
||
|
new fltk::Item(_("Center"));
|
||
|
o->end();
|
||
|
o->value(title_align);
|
||
|
o->tooltip(_("Where will window title be placed on the title bar?"));
|
||
|
}
|
||
|
{fltk::ValueInput* o = new fltk::ValueInput(205, 30, 60, 25, _("Height:"));
|
||
|
o->align(fltk::ALIGN_TOP|fltk::ALIGN_LEFT);
|
||
|
o->minimum(10);
|
||
|
o->maximum(50);
|
||
|
o->step(1);
|
||
|
o->value(20);
|
||
|
o->callback((fltk::Callback*)cb_Height);
|
||
|
o->value(title_height);
|
||
|
o->tooltip(_("Height of titlebar (in pixels)"));
|
||
|
}
|
||
|
{fltk::Button* o = titlebarLabelColorButton = new fltk::Button(205, 75, 60, 20, _("Label color: "));
|
||
|
o->callback((fltk::Callback*)cb_titlebarLabelColorButton);
|
||
|
o->align(fltk::ALIGN_LEFT);
|
||
|
o->color((fltk::Color)title_normal_color_text);
|
||
|
o->tooltip(_("Text color of window title"));
|
||
|
}
|
||
|
{fltk::Button* o = titlebarActiveLabelColorButton = new fltk::Button(205, 105, 60, 20, _("Active label color: "));
|
||
|
o->callback((fltk::Callback*)cb_titlebarActiveLabelColorButton);
|
||
|
o->align(fltk::ALIGN_LEFT);
|
||
|
o->color((fltk::Color) title_active_color_text);
|
||
|
o->tooltip(_("Title text color of active (foremost) window"));
|
||
|
}
|
||
|
{fltk::Button* o = titlebarColorButton = new fltk::Button(205, 135, 60, 20, _("Titlebar color: "));
|
||
|
o->callback((fltk::Callback*)cb_titlebarColorButton);
|
||
|
o->align(fltk::ALIGN_LEFT);
|
||
|
o->color((fltk::Color) title_normal_color);
|
||
|
o->tooltip(_("Color of title bar"));
|
||
|
}
|
||
|
{fltk::Button* o = titlebarActiveColorButton = new fltk::Button(205, 165, 60, 20, _("Active titlebar color: "));
|
||
|
o->callback((fltk::Callback*)cb_titlebarActiveColorButton);
|
||
|
o->align(fltk::ALIGN_LEFT);
|
||
|
o->color((fltk::Color)title_active_color);
|
||
|
o->tooltip(_("Titlebar color of active (foremost) window"));
|
||
|
}
|
||
|
{fltk::Choice* o = titlebarDrawGrad = new fltk::Choice(120, 200, 145, 25, _("Effect type:"));
|
||
|
o->callback((fltk::Callback*)cb_titlebarDrawGrad);
|
||
|
o->align(fltk::ALIGN_LEFT|fltk::ALIGN_WRAP);
|
||
|
o->begin();
|
||
|
new fltk::Item(_("Flat"));
|
||
|
new fltk::Item(_("Horizontal shade"));
|
||
|
new fltk::Item(_("Thin down"));
|
||
|
new fltk::Item(_("Up box"));
|
||
|
new fltk::Item(_("Down box"));
|
||
|
new fltk::Item(_("Plastic"));
|
||
|
o->end();
|
||
|
o->value(title_draw_grad);
|
||
|
o->tooltip(_("Effect that will be used when drawing titlebar"));
|
||
|
}
|
||
|
{fltk::Divider* o = new fltk::Divider();
|
||
|
o->resize(10,235,285,2);
|
||
|
{fltk::CheckButton* o = useThemeButton = new fltk::CheckButton(10, 245, 300, 25, _("&Use theme"));
|
||
|
o->callback((fltk::Callback*)cb_useThemeButton);
|
||
|
o->value(use_theme);
|
||
|
o->tooltip(_("Choose titlebar theme below (some options will be disabled)"));
|
||
|
}
|
||
|
{fltk::Input* o = themePathInput = new fltk::Input(65, 270, 195, 25, _("Path:"));
|
||
|
o->callback((fltk::Callback*)cb_themePathInput);
|
||
|
o->deactivate();
|
||
|
themePathInput->value(theme_path);
|
||
|
o->tooltip(_("Enter filename for file where theme is stored"));
|
||
|
}
|
||
|
{fltk::Button* o = browse_btn = new fltk::Button(270, 270, 25, 25, "...");
|
||
|
o->callback((fltk::Callback*)cb_browse_btn);
|
||
|
o->deactivate();
|
||
|
o->tooltip(_("Click here to choose theme"));
|
||
|
}
|
||
|
// {fltk::Divider* o = new fltk::Divider();
|
||
|
// o->resize(10,100,300,2);
|
||
|
// }
|
||
|
}
|
||
|
o->end();
|
||
|
}
|
||
|
{fltk::Group* o = new fltk::Group(0, 25, 305, 305, "&Resizing");
|
||
|
o->align(fltk::ALIGN_TOP|fltk::ALIGN_LEFT);
|
||
|
o->hide();
|
||
|
o->begin();
|
||
|
{fltk::CheckButton* o = animateButton = new fltk::CheckButton(10, 15, 295, 25, _("Animate size changes"));
|
||
|
o->set();
|
||
|
o->callback((fltk::Callback*)cb_animateButton);
|
||
|
o->value(animate);
|
||
|
o->tooltip(_("If you enable this option, maximize/minimize operations will be animated"));
|
||
|
}
|
||
|
{fltk::ValueSlider* o = animateSlider = new fltk::ValueSlider(70, 40, 225, 25, _("Speed:"));
|
||
|
o->type(fltk::ValueSlider::TICK_ABOVE);
|
||
|
o->box(fltk::DOWN_BOX);
|
||
|
o->textsize(10);
|
||
|
o->minimum(5);
|
||
|
o->maximum(20);
|
||
|
o->step(1);
|
||
|
o->value(14);
|
||
|
o->slider_size(8);
|
||
|
o->callback((fltk::Callback*)cb_animateSlider);
|
||
|
o->align(fltk::ALIGN_LEFT);
|
||
|
o->value(animate_speed);
|
||
|
if(animate) o->activate(); else o->deactivate();
|
||
|
o->tooltip(_("Set speed for animation when maximizing / minimizing windows"));
|
||
|
}
|
||
|
{fltk::Divider* o = new fltk::Divider();
|
||
|
o->resize(10,75,285,2);
|
||
|
}
|
||
|
{fltk::CheckButton* o = opaqueResize = new fltk::CheckButton(10, 85, 285, 25, "Show window content while resizing");
|
||
|
o->callback((fltk::Callback*)cb_opaqueResize);
|
||
|
o->value(opaque_resize);
|
||
|
o->tooltip(_("Enable if you want contents of windows to be redrawn as you resize window"));
|
||
|
}
|
||
|
o->end();
|
||
|
}
|
||
|
o->end();
|
||
|
}
|
||
|
// {fltk::Button* o = new fltk::Button(67, 337, 80, 25, "&OK");
|
||
|
// o->shortcut(0xff0d);
|
||
|
// o->callback((fltk::Callback*)cb_OK);
|
||
|
// }
|
||
|
{fltk::Button* o = applyButton = new fltk::Button(125, 350, 90, 25, _("&Apply"));
|
||
|
o->callback((fltk::Callback*)cb_Apply);
|
||
|
o->tooltip(_("Apply changes"));
|
||
|
}
|
||
|
{fltk::Button* o = new fltk::Button(225, 350, 90, 25, _("&Close"));
|
||
|
o->shortcut(0xff1b);
|
||
|
o->callback((fltk::Callback*)cb_Close);
|
||
|
o->tooltip(_("Close this window"));
|
||
|
}
|
||
|
o->end();
|
||
|
}
|
||
|
|
||
|
// Make sure that "Use theme" is active and standalone buttons inactive
|
||
|
// if theme is set - and vice versa
|
||
|
if (!theme_path || strlen(theme_path) < 2) // possibly just 1 space
|
||
|
useThemeButton->value(false);
|
||
|
else
|
||
|
useThemeButton->value(true);
|
||
|
cb_useThemeButton(useThemeButton, 0);
|
||
|
|
||
|
// above will activate Apply button, so we need to change it back
|
||
|
applyButton->deactivate();
|
||
|
conf_changed=false;
|
||
|
|
||
|
//useThemeButton->do_callback(FL_DIALOG_BTN);
|
||
|
w->show(argc, argv);
|
||
|
return fltk::run();
|
||
|
}
|
||
|
|