Exemple #1
0
 def __init__(self):
     """
     Default constructor.
     """
     self._text_editor = TextEditor()
     self._memento_list = []
     self._prev_state_ptr = -1
Exemple #2
0
 def text_editor ( self, ui, object, name, description, parent ):
     return TextEditor( parent,
                        factory     = self, 
                        ui          = ui, 
                        object      = object, 
                        name        = name, 
                        description = description ) 
 def __init__(self, msg_service: MessageService):
     self.doc = Doc()
     self.doc.site = int(random.getrandbits(32))
     self.patch_set = []
     self.msg_service = msg_service
     self.text_field = TextEditor(
         scrollbar=True,
         line_numbers=False,
         search_field=SearchToolbar(),
         key_bindings=self.__init_bindings(),
         lexer=AuthorLexer(self.doc)
     )
Exemple #4
0
    def view_xml(self, m=None):
        if not self.dock_window:
            self.dock_window = TextEditor(self)
            self.iface.mainWindow().addDockWidget(Qt.BottomDockWidgetArea,
                                                  self.dock_window)
            if not self.using_mapnik:
                # http://trac.osgeo.org/qgis/changeset/12955 - render starting signal
                QObject.connect(self.canvas,
                                SIGNAL("renderComplete(QPainter *)"),
                                self.checkLayers)

        self.dock_window.show()
        if self.loaded_mapfile:
            # if we have loaded a map xml or mml
            # so lets just display the active file
            xml = open(self.loaded_mapfile, 'rb').read()
        else:
            if not m:
                # regenerate from qgis objects
                e_c = sync.EasyCanvas(self, self.canvas)
                m = e_c.to_mapnik()
            if hasattr(mapnik, 'save_map_to_string'):
                xml = mapnik.save_map_to_string(m)
            else:
                (handle, mapfile) = tempfile.mkstemp('.xml', 'quantumnik-map-')
                os.close(handle)
                mapnik.save_map(m, str(mapfile))
                xml = open(mapfile, 'rb').read()
        e = self.canvas.extent()
        bbox = '%s %s %s %s' % (e.xMinimum(), e.yMinimum(), e.xMaximum(),
                                e.yMaximum())
        cmd = '\n<!-- nik2img.py mapnik.xml out.png -d %s %s -e %s -->\n' % (
            self.canvas.width(), self.canvas.height(), bbox)
        try:
            if self.mapnik_map:
                cmd += '<!-- <MinScaleDenominator>%s</MinScaleDenominator> -->\n' % (
                    self.mapnik_map.scale_denominator())
        except:
            pass

        code = xml + cmd
        if HIGHLIGHTING:
            highlighted = highlight(
                code, XmlLexer(),
                HtmlFormatter(linenos=False, nowrap=False, full=True))
            self.dock_window.textEdit.setHtml(highlighted)
        else:
            self.dock_window.textEdit.setText(xml + cmd)
    def __init__(self, title="", label_text="", completer=None):
        self.future = Future()

        def accept_text(buf) -> bool:
            """
            Change focus to OK button after user pressed enter on text field.
            """
            get_app().layout.focus(ok_button)
            buf.complete_state = None
            return True

        def accept():
            """
            Set future result to text from text field if user pressed OK
            button.
            """
            self.future.set_result(self.text_area.text)

        def cancel():
            """
            Set future result to None if user pressed cancel button.
            """
            self.future.set_result(None)

        self.text_area = TextEditor(
            completer=completer,
            multiline=False,
            width=D(preferred=40),
            accept_handler=accept_text,
            key_bindings=load_key_bindings(),
        )

        ok_button = Button(text="OK", handler=accept)
        cancel_button = Button(text="Cancel", handler=cancel)

        self.dialog = Dialog(
            title=title,
            body=HSplit([Label(text=label_text), self.text_area]),
            buttons=[ok_button, cancel_button],
            width=D(preferred=80),
            modal=True,
        )
Exemple #6
0
    def build(self):
        lt = self.config.get('UI', 'display_type')
        dtlut = {
            "RPI Touch": 0,
            "Small Desktop": 1,
            "Large Desktop": 2,
            "Wide Desktop": 3,
            "RPI Full Screen": 4
        }

        self.is_desktop = dtlut.get(lt, 0)

        # load the layouts for the desktop screen
        if self.is_desktop == 1:
            Builder.load_file('desktop.kv')
            Window.size = (1024, 768)

        elif self.is_desktop == 2 or self.is_desktop == 3 or self.is_desktop == 4:
            Builder.load_file('desktop_large.kv' if self.is_desktop ==
                              2 else 'desktop_wide.kv')
            if self.is_desktop != 4:
                # because rpi_egl does not like to be told the size
                s = self.config.get('UI', 'screen_size')
                if s == 'auto':
                    Window.size = (1280,
                                   1024) if self.is_desktop == 2 else (1280,
                                                                       800)
                elif 'x' in s:
                    (w, h) = s.split('x')
                    Window.size = (int(w), int(h))
                p = self.config.get('UI', 'screen_pos')
                if p != 'auto' and ',' in p:
                    (t, l) = p.split(',')
                    Window.top = int(t)
                    Window.left = int(l)
            Window.bind(on_request_close=self.window_request_close)

        else:
            self.is_desktop = 0
            # load the layouts for rpi 7" touch screen
            Builder.load_file('rpi.kv')

        self.is_cnc = self.config.getboolean('UI', 'cnc')
        self.tab_top = self.config.getboolean('UI', 'tab_top')
        self.is_webserver = self.config.getboolean('Web', 'webserver')
        self.is_show_camera = self.config.getboolean('Web', 'show_video')
        self.is_spindle_camera = self.config.getboolean(
            'General', 'is_spindle_camera')
        self.manual_tool_change = self.config.getboolean(
            'General', 'manual_tool_change')
        self.wait_on_m0 = self.config.getboolean('General', 'wait_on_m0')
        self.is_v2 = self.config.getboolean('General', 'v2')

        self.comms = Comms(App.get_running_app(),
                           self.config.getfloat('General', 'report_rate'))
        self.gcode_file = self.config.get('General', 'last_print_file')
        self.sm = ScreenManager()
        ms = MainScreen(name='main')
        self.main_window = ms.ids.main_window
        self.sm.add_widget(ms)
        self.sm.add_widget(GcodeViewerScreen(name='viewer', comms=self.comms))
        self.config_editor = ConfigEditor(name='config_editor')
        self.sm.add_widget(self.config_editor)
        self.gcode_help = GcodeHelp(name='gcode_help')
        self.sm.add_widget(self.gcode_help)
        if self.is_desktop == 0:
            self.text_editor = TextEditor(name='text_editor')
            self.sm.add_widget(self.text_editor)

        self.blank_timeout = self.config.getint('General', 'blank_timeout')
        Logger.info("SmoothieHost: screen blank set for {} seconds".format(
            self.blank_timeout))

        self.sm.bind(on_touch_down=self._on_touch)
        Clock.schedule_interval(self._every_second, 1)

        # select the file chooser to use
        # select which one we want from config
        filechooser = self.config.get('UI', 'filechooser')
        if self.is_desktop > 0:
            if filechooser != 'default':
                NativeFileChooser.type_name = filechooser
                Factory.register('filechooser', cls=NativeFileChooser)
                try:
                    f = Factory.filechooser()
                except Exception:
                    Logger.error(
                        "SmoothieHost: can't use selected file chooser: {}".
                        format(filechooser))
                    Factory.unregister('filechooser')
                    Factory.register('filechooser', cls=FileDialog)

            else:
                # use Kivy filechooser
                Factory.register('filechooser', cls=FileDialog)

            # we want to capture arrow keys
            Window.bind(on_key_down=self._on_keyboard_down)
        else:
            # use Kivy filechooser
            Factory.register('filechooser', cls=FileDialog)

        # setup for cnc or 3d printer
        if self.is_cnc:
            if self.is_desktop < 3:
                # remove Extruder panel from tabpanel and tab
                self.main_window.ids.tabs.remove_widget(
                    self.main_window.ids.tabs.extruder_tab)

        # if not CNC mode then do not show the ZABC buttons in jogrose
        if not self.is_cnc:
            self.main_window.ids.tabs.jog_rose.jogrosemain.remove_widget(
                self.main_window.ids.tabs.jog_rose.abc_panel)

        if self.is_webserver:
            self.webserver = ProgressServer()
            self.webserver.start(self, 8000)

        if self.is_show_camera:
            self.camera_url = self.config.get('Web', 'camera_url')
            self.sm.add_widget(CameraScreen(name='web cam'))
            self.main_window.tools_menu.add_widget(
                ActionButton(text='Web Cam',
                             on_press=lambda x: self._show_web_cam()))

        if self.is_spindle_camera:
            if self.is_desktop in [0, 4]:
                try:
                    self.sm.add_widget(SpindleCamera(name='spindle camera'))
                except Exception as err:
                    self.main_window.display(
                        'ERROR: failed to load spindle camera. Check logs')
                    Logger.error(
                        'Main: spindle camera exception: {}'.format(err))

            self.main_window.tools_menu.add_widget(
                ActionButton(text='Spindle Cam',
                             on_press=lambda x: self._show_spindle_cam()))

        # load any modules specified in config
        self._load_modules()

        if self.blank_timeout > 0:
            # unblank if blanked
            self.unblank_screen()

        return self.sm
Exemple #7
0
        # Za povratke vaše
        #
        # O, igračke drage
        # Iz djetinjstva mog"""
        #         "This is the longest line ever in the world here ever longest really "
        #         "longest too long for ordinary people for ordinary world too too long for anything in reality for real cmon "
        #         "too long really too too too long\n"
        #         "This is the longest line ever in the world here ever longest really "
        #         "longest too long for ordinary people for ordinary world too too long for anything in reality for real cmon "
        #         "too long really too too too long\n"
        #         "This is the longest line ever in the world here ever longest really "
        #         "longest too long for ordinary people for ordinary world too too long for anything in reality for real cmon "
        #         "too long really too too too long\n"
        "The first line.\n"
        "In between the two...\n"
        "The last line.")

    root = Tk()
    tedi = TextEditor(model)
    root.geometry("555x800+300+300")
    root.mainloop()
"""
"Vidimo da osnovni razred omogućava da grafički podsustav samostalno poziva naš kod za crtanje kad god se za to 
javi potreba, iako je oblikovan i izveden davno prije naše grafičke komponente. Koji oblikovni obrazac to omogućava?" 
--> TODO 

"Vidimo također da naša grafička komponenta preko osnovnog razreda može dobiti informacije o pritisnutim tipkama 
bez potrebe za čekanjem u radnoj petlji. Koji oblikovni obrazac to omogućava?"
--> Observer
"""
Exemple #8
0
    def __init__(self):
        """Initialize Tab with layout and behavior."""
        super(Tab, self).__init__()

        # regex pattern for SQL query block comments
        self.block_comment_re = re.compile(
            r'(^)?[^\S\n]*/(?:\*(.*?)\*/[^\S\n]*|/[^\n]*)($)?',
            re.DOTALL | re.MULTILINE)

        main_layout = QVBoxLayout(self)

        # define gdb props
        self.gdb = None
        self.gdb_items = None
        self.gdb_columns_names = None
        self.gdb_schemas = None

        # connected geodatabase path toolbar
        self.connected_gdb_path_label = QLabel('')
        self.connected_gdb_path_label.setTextInteractionFlags(
            Qt.TextSelectableByMouse)
        self.connected_gdb_path_label.setToolTip(
            'Connected geodatabase that queries will be run against')
        self.connected_gdb_path_label.setText(not_connected_to_gdb_message)

        self.browse_to_gdb = QPushButton('Browse')
        self.browse_to_gdb.setShortcut(QKeySequence('Ctrl+B'))
        self.browse_to_gdb.clicked.connect(
            lambda evt, arg=True: self.connect_to_geodatabase(
                evt, triggered_with_browse=True))

        self.gdb_sql_dialect_combobox = QComboBox()
        for dialect in sql_dialects_names:
            self.gdb_sql_dialect_combobox.addItem(dialect)

        self.gdb_browse_toolbar = QToolBar()
        self.gdb_browse_toolbar.setMaximumHeight(50)
        self.gdb_browse_toolbar.addWidget(self.browse_to_gdb)
        self.gdb_browse_toolbar.addWidget(self.connected_gdb_path_label)
        self.gdb_browse_toolbar.addSeparator()
        self.gdb_browse_toolbar.addWidget(self.gdb_sql_dialect_combobox)

        # table with results
        self.table = ResultTable()

        # execute SQL query
        self.execute = QAction('Execute', self)
        self.execute.setShortcuts(
            [QKeySequence('F5'),
             QKeySequence('Ctrl+Return')])
        self.execute.triggered.connect(self.run_query)
        self.addAction(self.execute)

        # enter a SQL query
        self.query = TextEditor()
        self.query.setPlainText('')
        font = self.query.font()
        font.setFamily('Consolas')
        font.setStyleHint(QFont.Monospace)

        # TODO: add line numbers to the text editor
        font.setPointSize(14)
        self.query.setFont(font)
        self.query.setTabStopWidth(20)
        self.highlighter = Highlighter(self.query.document())

        # TODO select block of text - Ctrl+/ and they become comments
        self.completer = Completer()
        self.query.set_completer(self.completer.completer)

        # errors panel to show if query fails to execute properly
        self.errors_panel = QPlainTextEdit()
        font = self.query.font()
        font.setPointSize(12)
        self.errors_panel.setStyleSheet('color:red')
        self.errors_panel.setFont(font)
        self.errors_panel.hide()

        # splitter between the toolbar, query window, and the result set table
        splitter = QSplitter(Qt.Vertical)
        splitter.addWidget(self.gdb_browse_toolbar)
        splitter.addWidget(self.query)
        splitter.addWidget(self.table)
        splitter.addWidget(self.errors_panel)

        # add the settings after the widget have been added
        splitter.setCollapsible(0, True)
        splitter.setCollapsible(1, False)
        splitter.setCollapsible(2, False)
        splitter.setCollapsible(3, False)
        splitter.setStretchFactor(0, 3)
        splitter.setStretchFactor(1, 7)
        splitter.setSizes((100, 200, 300))
        self.table.hide()

        # TOC
        self.toc = QTreeWidget()
        self.toc.setHeaderHidden(True)

        # second splitter between the TOC to the left and the query/table to the
        # right
        toc_splitter = QSplitter(Qt.Horizontal)
        toc_splitter.addWidget(self.toc)
        toc_splitter.addWidget(splitter)
        toc_splitter.setCollapsible(0, True)
        toc_splitter.setSizes((200, 800))  # set the TOC vs data panel

        main_layout.addWidget(toc_splitter)

        margins = QMargins()
        margins.setBottom(10)
        margins.setLeft(10)
        margins.setRight(10)
        margins.setTop(10)
        main_layout.setContentsMargins(margins)

        self.setLayout(main_layout)
        QApplication.setStyle(QStyleFactory.create('Cleanlooks'))
        self.show()

        return