2020-05-02 01:12:09 +00:00
from PyQt5 import QtWidgets , QtCore
2020-05-03 15:01:06 +00:00
from PyQt5 . QtCore import QSettings
2020-05-02 01:12:09 +00:00
from flatcamGUI . preferences . OptionsGroupUI import OptionsGroupUI2
2020-04-29 21:53:16 +00:00
2020-04-30 09:47:07 +00:00
import gettext
import FlatCAMTranslation as fcTranslate
import builtins
fcTranslate . apply_language ( ' strings ' )
if ' _ ' not in builtins . __dict__ :
_ = gettext . gettext
2020-05-02 01:12:09 +00:00
from flatcamGUI . preferences . OptionUI import OptionUI , CheckboxOptionUI , RadioSetOptionUI , \
2020-05-02 03:09:07 +00:00
SeparatorOptionUI , HeadingOptionUI , ComboboxOptionUI , ColorOptionUI , FullWidthButtonOptionUI , \
SliderWithSpinnerOptionUI
2020-04-30 09:47:07 +00:00
2020-04-29 21:53:16 +00:00
2020-05-02 02:08:42 +00:00
class GeneralGUIPrefGroupUI ( OptionsGroupUI2 ) :
2020-05-02 00:11:31 +00:00
def __init__ ( self , decimals = 4 , * * kwargs ) :
self . decimals = decimals
2020-05-03 14:38:26 +00:00
super ( ) . __init__ ( * * kwargs )
2020-05-02 02:08:42 +00:00
self . setTitle ( str ( _ ( " GUI Preferences " ) ) )
2020-05-02 00:11:31 +00:00
2020-05-02 01:12:09 +00:00
self . layout_field = self . option_dict ( ) [ " layout " ] . get_field ( )
self . layout_field . activated . connect ( self . on_layout )
self . theme_field = self . option_dict ( ) [ " global_theme " ] . get_field ( )
self . theme_apply_button = self . option_dict ( ) [ " __button_apply_theme " ] . get_field ( )
self . theme_apply_button . clicked . connect ( self . on_theme_change )
self . style_field = self . option_dict ( ) [ " style " ] . get_field ( )
current_style_index = self . style_field . findText ( QtWidgets . qApp . style ( ) . objectName ( ) , QtCore . Qt . MatchFixedString )
self . style_field . setCurrentIndex ( current_style_index )
self . style_field . activated [ str ] . connect ( self . handle_style )
self . hdpi_field = self . option_dict ( ) [ " hdpi " ] . get_field ( )
qsettings = QSettings ( " Open Source " , " FlatCAM " )
if qsettings . contains ( " hdpi " ) :
self . hdpi_field . set_value ( qsettings . value ( ' hdpi ' , type = int ) )
else :
self . hdpi_field . set_value ( False )
self . hdpi_field . stateChanged . connect ( self . handle_hdpi )
2020-05-02 03:09:07 +00:00
self . sel_line_field = self . option_dict ( ) [ " global_sel_line " ] . get_field ( )
self . sel_fill_field = self . option_dict ( ) [ " global_sel_fill " ] . get_field ( )
self . sel_alpha_field = self . option_dict ( ) [ " _global_sel_alpha " ] . get_field ( )
self . sel_alpha_field . spinner . valueChanged . connect ( self . on_sel_alpha_change )
self . alt_sel_line_field = self . option_dict ( ) [ " global_alt_sel_line " ] . get_field ( )
self . alt_sel_fill_field = self . option_dict ( ) [ " global_alt_sel_fill " ] . get_field ( )
self . alt_sel_alpha_field = self . option_dict ( ) [ " _global_alt_sel_alpha " ] . get_field ( )
self . alt_sel_alpha_field . spinner . valueChanged . connect ( self . on_alt_sel_alpha_change )
2020-05-02 00:11:31 +00:00
def build_options ( self ) - > [ OptionUI ] :
return [
RadioSetOptionUI (
option = " global_theme " ,
label_text = " Theme " ,
label_tooltip = " Select a theme for FlatCAM. \n It will theme the plot area. " ,
choices = [
{ " label " : _ ( " Light " ) , " value " : " white " } ,
{ " label " : _ ( " Dark " ) , " value " : " black " }
] ,
orientation = ' vertical '
) ,
CheckboxOptionUI (
option = " global_gray_icons " ,
label_text = " Use Gray Icons " ,
label_tooltip = " Check this box to use a set of icons with \n a lighter (gray) color. To be used when a \n full dark theme is applied. "
) ,
FullWidthButtonOptionUI (
option = " __button_apply_theme " ,
label_text = " Apply Theme " ,
label_tooltip = " Select a theme for FlatCAM. \n "
" It will theme the plot area. \n "
" The application will restart after change. "
) ,
SeparatorOptionUI ( ) ,
ComboboxOptionUI (
option = " layout " ,
label_text = " Layout " ,
label_tooltip = " Select an layout for FlatCAM. \n It is applied immediately. " ,
choices = [
" standard " ,
" compact " ,
" minimal "
]
) ,
ComboboxOptionUI (
option = " style " ,
label_text = " Style " ,
label_tooltip = " Select an style for FlatCAM. \n It will be applied at the next app start. " ,
choices = QtWidgets . QStyleFactory . keys ( )
) ,
CheckboxOptionUI (
option = " hdpi " ,
label_text = ' Activate HDPI Support ' ,
label_tooltip = " Enable High DPI support for FlatCAM. \n It will be applied at the next app start. " ,
) ,
CheckboxOptionUI (
option = " global_hover " ,
label_text = ' Display Hover Shape ' ,
label_tooltip = " Enable display of a hover shape for FlatCAM objects. \n It is displayed whenever the mouse cursor is hovering \n over any kind of not-selected object. " ,
) ,
CheckboxOptionUI (
option = " global_selection_shape " ,
label_text = ' Display Selection Shape ' ,
label_tooltip = " Enable the display of a selection shape for FlatCAM objects. \n "
" It is displayed whenever the mouse selects an object \n "
" either by clicking or dragging mouse from left to right or \n "
" right to left. "
) ,
SeparatorOptionUI ( ) ,
HeadingOptionUI ( label_text = " Left-Right Selection Color " , label_tooltip = None ) ,
ColorOptionUI (
option = " global_sel_line " ,
label_text = " Outline " ,
label_tooltip = " Set the line color for the ' left to right ' selection box. "
) ,
ColorOptionUI (
option = " global_sel_fill " ,
label_text = " Fill " ,
label_tooltip = " Set the fill color for the selection box \n "
" in case that the selection is done from left to right. \n "
" First 6 digits are the color and the last 2 \n "
" digits are for alpha (transparency) level. "
) ,
2020-05-02 03:09:07 +00:00
SliderWithSpinnerOptionUI (
option = " _global_sel_alpha " ,
label_text = " Alpha " ,
label_tooltip = " Set the fill transparency for the ' left to right ' selection box. " ,
2020-05-03 03:18:10 +00:00
min_value = 0 , max_value = 255 , step = 1
2020-05-02 03:09:07 +00:00
) ,
2020-05-02 02:08:42 +00:00
SeparatorOptionUI ( ) ,
2020-05-02 00:11:31 +00:00
HeadingOptionUI ( label_text = " Right-Left Selection Color " , label_tooltip = None ) ,
ColorOptionUI (
option = " global_alt_sel_line " ,
label_text = " Outline " ,
label_tooltip = " Set the line color for the ' right to left ' selection box. "
) ,
ColorOptionUI (
option = " global_alt_sel_fill " ,
label_text = " Fill " ,
label_tooltip = " Set the fill color for the selection box \n "
" in case that the selection is done from right to left. \n "
" First 6 digits are the color and the last 2 \n "
" digits are for alpha (transparency) level. "
) ,
2020-05-02 03:09:07 +00:00
SliderWithSpinnerOptionUI (
option = " _global_alt_sel_alpha " ,
label_text = " Alpha " ,
label_tooltip = " Set the fill transparency for the ' right to left ' selection box. " ,
2020-05-03 03:18:10 +00:00
min_value = 0 , max_value = 255 , step = 1
2020-05-02 03:09:07 +00:00
) ,
2020-05-02 00:11:31 +00:00
SeparatorOptionUI ( ) ,
HeadingOptionUI ( label_text = ' Editor Color ' , label_tooltip = None ) ,
ColorOptionUI (
option = " global_draw_color " ,
label_text = " Drawing " ,
label_tooltip = " Set the color for the shape. "
) ,
ColorOptionUI (
option = " global_sel_draw_color " ,
label_text = " Selection " ,
label_tooltip = " Set the color of the shape when selected. "
) ,
SeparatorOptionUI ( ) ,
HeadingOptionUI ( label_text = ' Project Items Color ' , label_tooltip = None ) ,
ColorOptionUI (
option = " global_proj_item_color " ,
label_text = " Enabled " ,
label_tooltip = " Set the color of the items in Project Tab Tree. "
) ,
ColorOptionUI (
option = " global_proj_item_dis_color " ,
label_text = " Disabled " ,
label_tooltip = " Set the color of the items in Project Tab Tree, \n "
" for the case when the items are disabled. "
) ,
CheckboxOptionUI (
option = " global_project_autohide " ,
label_text = " Project AutoHide " ,
label_tooltip = " Check this box if you want the project/selected/tool tab area to \n "
" hide automatically when there are no objects loaded and \n "
" to show whenever a new object is created. "
) ,
]
2020-05-02 03:09:07 +00:00
def on_sel_alpha_change ( self ) :
alpha = self . sel_alpha_field . get_value ( )
fill = self . _modify_color_alpha ( color = self . sel_fill_field . get_value ( ) , alpha = alpha )
self . sel_fill_field . set_value ( fill )
line = self . _modify_color_alpha ( color = self . sel_line_field . get_value ( ) , alpha = alpha )
self . sel_line_field . set_value ( line )
def on_alt_sel_alpha_change ( self ) :
alpha = self . alt_sel_alpha_field . get_value ( )
fill = self . _modify_color_alpha ( color = self . alt_sel_fill_field . get_value ( ) , alpha = alpha )
self . alt_sel_fill_field . set_value ( fill )
line = self . _modify_color_alpha ( color = self . alt_sel_line_field . get_value ( ) , alpha = alpha )
self . alt_sel_line_field . set_value ( line )
def _modify_color_alpha ( self , color : str , alpha : int ) :
color_without_alpha = color [ : 7 ]
if alpha > 255 :
return color_without_alpha + " FF "
elif alpha < 0 :
return color_without_alpha + " 00 "
else :
hexalpha = hex ( alpha ) [ 2 : ]
if len ( hexalpha ) == 1 :
hexalpha = " 0 " + hexalpha
return color_without_alpha + hexalpha
2020-04-29 21:53:16 +00:00
def on_theme_change ( self ) :
2020-05-02 01:12:09 +00:00
# FIXME: this should be moved out to a view model
val = self . theme_field . get_value ( )
2020-04-29 21:53:16 +00:00
qsettings = QSettings ( " Open Source " , " FlatCAM " )
2020-05-02 01:12:09 +00:00
qsettings . setValue ( " theme " , val )
2020-04-29 21:53:16 +00:00
# This will write the setting to the platform specific storage.
del qsettings
self . app . on_app_restart ( )
def on_layout ( self , index = None , lay = None ) :
if lay :
current_layout = lay
else :
2020-05-02 01:12:09 +00:00
current_layout = self . layout_field . get_value ( )
2020-05-03 14:57:12 +00:00
self . app . ui . set_layout ( current_layout )
2020-04-29 21:53:16 +00:00
2020-05-02 01:12:09 +00:00
@staticmethod
def handle_style ( style ) :
# FIXME: this should be moved out to a view model
# set current style
qsettings = QSettings ( " Open Source " , " FlatCAM " )
qsettings . setValue ( ' style ' , style )
# This will write the setting to the platform specific storage.
del qsettings
@staticmethod
def handle_hdpi ( state ) :
# FIXME: this should be moved out to a view model
# set current HDPI
qsettings = QSettings ( " Open Source " , " FlatCAM " )
qsettings . setValue ( ' hdpi ' , state )
# This will write the setting to the platform specific storage.
del qsettings