def __init__(self, fetcher): self.fetcher = fetcher self.connect(self.fetcher, SIGNAL("want_update"), self.requestData) self.fragment = fetcher.fragment self.cumulative_mode = False self.interval = Interval('daily') self.reset_start = False self.saved_start = 0 self.is_closed = False self.uuid = QUuid.createUuid().toString() # ugl, ugl, ugl, it's ugly yeah \o/ # print type(self.parent().window) if hasattr(self.parent().window, 'current_page'): self.current_page = self.parent().window.current_page else: self.current_page = None self.user_settings = None # XXX this is ugly # TODO kill the crap who has written this. top_window = self.parent() while top_window: try: self.user_settings = top_window.user_settings except AttributeError: top_window = top_window.parent() else: break self.title = QLabel() self.title.setAlignment(Qt.AlignLeft | Qt.AlignTop) self.title.setStyleSheet('font: bold 13px')
class BaseFragmentView: state_colours = ['#e6a9ab', '#cae1a5'] @staticmethod def name(): raise NotImplementedError() def __init__(self, fetcher): self.fetcher = fetcher self.connect(self.fetcher, SIGNAL("want_update"), self.requestData) self.fragment = fetcher.fragment self.cumulative_mode = False self.interval = Interval('daily') self.reset_start = False self.saved_start = 0 self.is_closed = False self.uuid = QUuid.createUuid().toString() # ugl, ugl, ugl, it's ugly yeah \o/ # print type(self.parent().window) if hasattr(self.parent().window, 'current_page'): self.current_page = self.parent().window.current_page else: self.current_page = None self.user_settings = None # XXX this is ugly # TODO kill the crap who has written this. top_window = self.parent() while top_window: try: self.user_settings = top_window.user_settings except AttributeError: top_window = top_window.parent() else: break self.title = QLabel() self.title.setAlignment(Qt.AlignLeft | Qt.AlignTop) self.title.setStyleSheet('font: bold 13px') #def destroy(self, *args, **kwargs): # import gc # from pprint import pprint # pprint(gc.get_referrers(self)) # QWidget.destroy(self, *args, **kwargs) def setClosed(self): self.is_closed = True def destructor(self): pass # self.fetcher.unref(self.updateData) # self.disconnect(self.fetcher, SIGNAL("want_update"), self.requestData) def getServerTime(self, callback): self.fetcher.getTime(callback) def requestAllData(self, time=None): if not time: return self.getServerTime(self.requestData) self.interval.setServerTime(int(float(time))) self._argsTime() self.fragment.args.update({'no_limit' : True}) self.fetcher.fetch(self.updateCSVData) self.fragment.args.pop('no_limit') def requestData(self, time=None): if self.fetcher.type == 'streaming' or self.fetcher.type == 'real-time': self.fetcher.fetch(self.updateData) return # search for already set start time (will override range) if self.interval != None and self.interval.getMode() != 'search': if not time: return self.getServerTime(self.requestData) self.interval.setServerTime(int(float(time))) self._argsTime() # FIXME may be unecessary #time_args = {'timestamp': starttime} #self.fragment.args.update(time_args) self.fetcher.fetch(self.updateData) def _argsTime(self): starttime = self.interval.getStart().toTime_t() endtime = self.interval.getEnd().toTime_t() time_args = {'start_time': starttime, 'end_time': endtime} self.fragment.args.update(time_args) starttime = unicode(self.interval.getStart().toString(Qt.ISODate)) endtime = unicode(self.interval.getEnd().toString(Qt.ISODate)) time_args = {'session_start_time': starttime, 'session_end_time': endtime} self.fragment.args.update(time_args) if self.fetcher.args: self.reset_start = True if self.fragment.args.has_key('start'): if self.reset_start: self.reset_start = False self.saved_start = self.fragment.args['start'] self.fragment.args['start'] = 0 else: if self.fragment.args['start'] == 0: self.fragment.args['start'] = self.saved_start self.saved_start = 0 def updateData(self, result): raise NotImplementedError() # def isPrintable(self): return False def isReady(self): return True def getTitle(self): return self.fragment.title def getActions(self): return [] def ask_to_create_page(self, pagename): reply = QMessageBox.question(None, self.tr("Create a new view"), unicode(self.tr( """There is no view linked to this kind of data: %s Do you want to create it?""")) % pagename, QMessageBox.Yes | QMessageBox.No) if reply != QMessageBox.Yes: return None return self.createPage(pagename) def createPage(self, field): ok = False try: title = arg_types[field].label except KeyError: title = field title, ok = QInputDialog.getText(None, self.tr('Create a new view'), self.tr('Please enter the new view title:'), QLineEdit.Normal, title) if ok and title: page = self.user_settings.createPage(field) page.title = unicode(title) arg_types[field].add_pagelink(page.name) return page return None def loadPage(self, field, label, value, pagename, acl=None): if not self.current_page: return compatibility = self.user_settings.compatibility arg_data = arg_types[field].data(field, (label, value), compatibility=compatibility, transform_label=False) if not pagename: pagename = self.current_page.get_pagelink_default(field, arg_data) if not pagename: return #page = self.ask_to_create_page(field) #if not page: # return #pagename = page.name args = self.current_page.get_pagelink_args(field, arg_data, self.fetcher.args) if acl: args.update(acl) self.emit(SIGNAL("open_page"), pagename, args) def setCumulative(self, cumulative): self.cumulative_mode = cumulative def setInterval(self, interval): self.interval = interval def getToolspace(self): return self.title def printMe(self, painter, rect): # redirect table's painting on a pixmap view = self.viewport() if hasattr(self, "viewport") else self pixmap = QPixmap.grabWidget(view, view.rect()) QPainter.setRedirected(view, pixmap) event = QPaintEvent(QRect(0, 0, view.width(), view.height())) QApplication.sendEvent(view, event) QPainter.restoreRedirected(view) # print scaled pixmap pixmap = pixmap.scaled(rect.width(), rect.height(), Qt.KeepAspectRatio, Qt.SmoothTransformation) painter.drawPixmap(rect, pixmap, pixmap.rect())