| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335 |
- # ##########################################################
- # FlatCAM: 2D Post-processing for Manufacturing #
- # http://flatcam.org #
- # Author: Juan Pablo Caram (c) #
- # Date: 2/5/2014 #
- # MIT Licence #
- # ##########################################################
- # ##########################################################
- # File modified by: Marius Stanciu #
- # ##########################################################
- from AppEditors.FlatCAMTextEditor import TextEditor
- from AppObjects.FlatCAMObj import *
- import gettext
- import AppTranslation as fcTranslate
- import builtins
- fcTranslate.apply_language('strings')
- if '_' not in builtins.__dict__:
- _ = gettext.gettext
- class DocumentObject(FlatCAMObj):
- """
- Represents a Document object.
- """
- optionChanged = QtCore.pyqtSignal(str)
- ui_type = DocumentObjectUI
- def __init__(self, name):
- self.decimals = self.app.decimals
- log.debug("Creating a Document object...")
- FlatCAMObj.__init__(self, name)
- self.kind = "document"
- self.units = ''
- self.ser_attrs = ['options', 'kind', 'source_file']
- self.source_file = ''
- self.doc_code = ''
- self.font_name = None
- self.font_italic = None
- self.font_bold = None
- self.font_underline = None
- self.document_editor_tab = None
- self._read_only = False
- self.units_found = self.app.defaults['units']
- def set_ui(self, ui):
- FlatCAMObj.set_ui(self, ui)
- log.debug("DocumentObject.set_ui()")
- assert isinstance(self.ui, DocumentObjectUI), \
- "Expected a DocumentObjectUI, got %s" % type(self.ui)
- self.units = self.app.defaults['units'].upper()
- self.units_found = self.app.defaults['units']
- # Fill form fields only on object create
- self.to_form()
- # Show/Hide Advanced Options
- if self.app.defaults["global_app_level"] == 'b':
- self.ui.level.setText(_(
- '<span style="color:green;"><b>Basic</b></span>'
- ))
- else:
- self.ui.level.setText(_(
- '<span style="color:red;"><b>Advanced</b></span>'
- ))
- self.document_editor_tab = TextEditor(app=self.app)
- stylesheet = """
- QTextEdit {selection-background-color:%s;
- selection-color:white;
- }
- """ % self.app.defaults["document_sel_color"]
- self.document_editor_tab.code_editor.setStyleSheet(stylesheet)
- # first clear previous text in text editor (if any)
- self.document_editor_tab.code_editor.clear()
- self.document_editor_tab.code_editor.setReadOnly(self._read_only)
- self.document_editor_tab.buttonRun.hide()
- self.ui.autocomplete_cb.set_value(self.app.defaults['document_autocompleter'])
- self.on_autocomplete_changed(state=self.app.defaults['document_autocompleter'])
- self.on_tab_size_change(val=self.app.defaults['document_tab_size'])
- flt = "FlatCAM Docs (*.FlatDoc);;All Files (*.*)"
- # ######################################################################
- # ######################## SIGNALS #####################################
- # ######################################################################
- self.document_editor_tab.buttonOpen.clicked.disconnect()
- self.document_editor_tab.buttonOpen.clicked.connect(lambda: self.document_editor_tab.handleOpen(filt=flt))
- self.document_editor_tab.buttonSave.clicked.disconnect()
- self.document_editor_tab.buttonSave.clicked.connect(lambda: self.document_editor_tab.handleSaveGCode(filt=flt))
- self.document_editor_tab.code_editor.textChanged.connect(self.on_text_changed)
- self.ui.font_type_cb.currentFontChanged.connect(self.font_family)
- self.ui.font_size_cb.activated.connect(self.font_size)
- self.ui.font_bold_tb.clicked.connect(self.on_bold_button)
- self.ui.font_italic_tb.clicked.connect(self.on_italic_button)
- self.ui.font_under_tb.clicked.connect(self.on_underline_button)
- self.ui.font_color_entry.editingFinished.connect(self.on_font_color_entry)
- self.ui.font_color_button.clicked.connect(self.on_font_color_button)
- self.ui.sel_color_entry.editingFinished.connect(self.on_selection_color_entry)
- self.ui.sel_color_button.clicked.connect(self.on_selection_color_button)
- self.ui.al_left_tb.clicked.connect(lambda: self.document_editor_tab.code_editor.setAlignment(Qt.AlignLeft))
- self.ui.al_center_tb.clicked.connect(lambda: self.document_editor_tab.code_editor.setAlignment(Qt.AlignCenter))
- self.ui.al_right_tb.clicked.connect(lambda: self.document_editor_tab.code_editor.setAlignment(Qt.AlignRight))
- self.ui.al_justify_tb.clicked.connect(
- lambda: self.document_editor_tab.code_editor.setAlignment(Qt.AlignJustify)
- )
- self.ui.autocomplete_cb.stateChanged.connect(self.on_autocomplete_changed)
- self.ui.tab_size_spinner.returnPressed.connect(self.on_tab_size_change)
- # #######################################################################
- self.ui.font_color_entry.set_value(self.app.defaults['document_font_color'])
- self.ui.font_color_button.setStyleSheet(
- "background-color:%s" % str(self.app.defaults['document_font_color']))
- self.ui.sel_color_entry.set_value(self.app.defaults['document_sel_color'])
- self.ui.sel_color_button.setStyleSheet(
- "background-color:%s" % self.app.defaults['document_sel_color'])
- self.ui.font_size_cb.setCurrentIndex(int(self.app.defaults['document_font_size']))
- self.document_editor_tab.handleTextChanged()
- self.ser_attrs = ['options', 'kind', 'source_file']
- if Qt.mightBeRichText(self.source_file):
- self.document_editor_tab.code_editor.setHtml(self.source_file)
- else:
- for line in self.source_file.splitlines():
- self.document_editor_tab.code_editor.append(line)
- self.build_ui()
- @property
- def read_only(self):
- return self._read_only
- @read_only.setter
- def read_only(self, val):
- if val:
- self._read_only = True
- else:
- self._read_only = False
- def build_ui(self):
- FlatCAMObj.build_ui(self)
- tab_here = False
- # try to not add too many times a tab that it is already installed
- for idx in range(self.app.ui.plot_tab_area.count()):
- if self.app.ui.plot_tab_area.widget(idx).objectName() == self.options['name']:
- tab_here = True
- break
- # add the tab if it is not already added
- if tab_here is False:
- self.app.ui.plot_tab_area.addTab(self.document_editor_tab, '%s' % _("Document Editor"))
- self.document_editor_tab.setObjectName(self.options['name'])
- # Switch plot_area to CNCJob tab
- self.app.ui.plot_tab_area.setCurrentWidget(self.document_editor_tab)
- def on_autocomplete_changed(self, state):
- if state:
- self.document_editor_tab.code_editor.completer_enable = True
- else:
- self.document_editor_tab.code_editor.completer_enable = False
- def on_tab_size_change(self, val=None):
- try:
- self.ui.tab_size_spinner.returnPressed.disconnect(self.on_tab_size_change)
- except TypeError:
- pass
- if val:
- self.ui.tab_size_spinner.set_value(val)
- tab_balue = int(self.ui.tab_size_spinner.get_value())
- self.document_editor_tab.code_editor.setTabStopWidth(tab_balue)
- self.app.defaults['document_tab_size'] = tab_balue
- self.ui.tab_size_spinner.returnPressed.connect(self.on_tab_size_change)
- def on_text_changed(self):
- self.source_file = self.document_editor_tab.code_editor.toHtml()
- # print(self.source_file)
- def font_family(self, font):
- # self.document_editor_tab.code_editor.selectAll()
- font.setPointSize(float(self.ui.font_size_cb.get_value()))
- self.document_editor_tab.code_editor.setCurrentFont(font)
- self.font_name = self.ui.font_type_cb.currentFont().family()
- def font_size(self):
- # self.document_editor_tab.code_editor.selectAll()
- self.document_editor_tab.code_editor.setFontPointSize(float(self.ui.font_size_cb.get_value()))
- def on_bold_button(self):
- if self.ui.font_bold_tb.isChecked():
- self.document_editor_tab.code_editor.setFontWeight(QtGui.QFont.Bold)
- self.font_bold = True
- else:
- self.document_editor_tab.code_editor.setFontWeight(QtGui.QFont.Normal)
- self.font_bold = False
- def on_italic_button(self):
- if self.ui.font_italic_tb.isChecked():
- self.document_editor_tab.code_editor.setFontItalic(True)
- self.font_italic = True
- else:
- self.document_editor_tab.code_editor.setFontItalic(False)
- self.font_italic = False
- def on_underline_button(self):
- if self.ui.font_under_tb.isChecked():
- self.document_editor_tab.code_editor.setFontUnderline(True)
- self.font_underline = True
- else:
- self.document_editor_tab.code_editor.setFontUnderline(False)
- self.font_underline = False
- # Setting font colors handlers
- def on_font_color_entry(self):
- self.app.defaults['document_font_color'] = self.ui.font_color_entry.get_value()
- self.ui.font_color_button.setStyleSheet("background-color:%s" % str(self.app.defaults['document_font_color']))
- def on_font_color_button(self):
- current_color = QtGui.QColor(self.app.defaults['document_font_color'])
- c_dialog = QtWidgets.QColorDialog()
- font_color = c_dialog.getColor(initial=current_color)
- if font_color.isValid() is False:
- return
- self.document_editor_tab.code_editor.setTextColor(font_color)
- self.ui.font_color_button.setStyleSheet("background-color:%s" % str(font_color.name()))
- new_val = str(font_color.name())
- self.ui.font_color_entry.set_value(new_val)
- self.app.defaults['document_font_color'] = new_val
- # Setting selection colors handlers
- def on_selection_color_entry(self):
- self.app.defaults['document_sel_color'] = self.ui.sel_color_entry.get_value()
- self.ui.sel_color_button.setStyleSheet("background-color:%s" % str(self.app.defaults['document_sel_color']))
- def on_selection_color_button(self):
- current_color = QtGui.QColor(self.app.defaults['document_sel_color'])
- c_dialog = QtWidgets.QColorDialog()
- sel_color = c_dialog.getColor(initial=current_color)
- if sel_color.isValid() is False:
- return
- p = QtGui.QPalette()
- p.setColor(QtGui.QPalette.Highlight, sel_color)
- p.setColor(QtGui.QPalette.HighlightedText, QtGui.QColor('white'))
- self.document_editor_tab.code_editor.setPalette(p)
- self.ui.sel_color_button.setStyleSheet("background-color:%s" % str(sel_color.name()))
- new_val = str(sel_color.name())
- self.ui.sel_color_entry.set_value(new_val)
- self.app.defaults['document_sel_color'] = new_val
- def mirror(self, axis, point):
- pass
- def offset(self, vect):
- pass
- def rotate(self, angle, point):
- pass
- def scale(self, xfactor, yfactor=None, point=None):
- pass
- def skew(self, angle_x, angle_y, point):
- pass
- def buffer(self, distance, join, factor=None):
- pass
- def bounds(self, flatten=False):
- return None, None, None, None
- def to_dict(self):
- """
- Returns a representation of the object as a dictionary.
- Attributes to include are listed in ``self.ser_attrs``.
- :return: A dictionary-encoded copy of the object.
- :rtype: dict
- """
- d = {}
- for attr in self.ser_attrs:
- d[attr] = getattr(self, attr)
- return d
- def from_dict(self, d):
- """
- Sets object's attributes from a dictionary.
- Attributes to include are listed in ``self.ser_attrs``.
- This method will look only for only and all the
- attributes in ``self.ser_attrs``. They must all
- be present. Use only for deserializing saved
- objects.
- :param d: Dictionary of attributes to set in the object.
- :type d: dict
- :return: None
- """
- for attr in self.ser_attrs:
- setattr(self, attr, d[attr])
|