def __init__(self): """ Default constructor. """ self._text_editor = TextEditor() self._memento_list = [] self._prev_state_ptr = -1
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) )
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, )
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
# 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 """
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