class MainWindow

Attributes

study_table_models[R]
ui[R]

Public Class Methods

new(parent = nil) click to toggle source
Calls superclass method
# File lib/tmis/interface/mainwindow.rb, line 149
def initialize(parent = nil)
  super(parent)
  @ui = Ui::MainWindow.new
  @ui.setup_ui self
  @ui.exportMenu.enabled = false
  @study_table_views = [@ui.studiesTableView, @ui.studiesTableView2, @ui.studiesTableView3,
                        @ui.studiesTableView4, @ui.studiesTableView5, @ui.studiesTableView6]
  @table_views = [[Cabinet, CabinetTableModel, @ui.cabinetsTableView], [Course, CourseTableModel, @ui.coursesTableView],
                  [Group, GroupTableModel, @ui.groupsTableView], [Lecturer, LecturerTableModel, @ui.lecturersTableView],
                  [Semester, SemesterTableModel, @ui.semestersTableView], [Speciality, SpecialityTableModel, @ui.specialitiesTableView],
                  [SpecialitySubject, SpecialitySubjectTableModel, @ui.specialitySubjectsTableView],
                  [Subgroup, SubgroupTableModel, @ui.subgroupsTableView], [Subject, SubjectTableModel, @ui.subjectsTableView]]
  # Следующие два атрибута используются для обхода бага связанного с работой GC
  # http://stackoverflow.com/questions/9715548/cant-display-more-than-one-table-model-inheriting-from-the-same-class-on-differ
  @table_models = @study_table_models = []
  @tables_views_to_hide = @study_table_views + [@ui.cabinetsTableView, @ui.coursesTableView, @ui.groupsTableView,
                   @ui.lecturersTableView, @ui.semestersTableView, @ui.specialitySubjectsTableView,
                   @ui.specialitiesTableView, @ui.subgroupsTableView, @ui.subjectsTableView, @ui.dateDateEdit,
                   @ui.dayLabel, @ui.dayLabel2, @ui.dayLabel3, @ui.dayLabel4, @ui.dayLabel5, @ui.dayLabel6,
                   @ui.subjectsListView, @ui.lecturersListView, @ui.cabinetsListView, @ui.tarificationCheckBox,
                   @ui.addCabinetPushButton, @ui.addCoursePushButton, @ui.addGroupPushButton,
                   @ui.addSubgroupPushButton, @ui.addLecturerPushButton, @ui.addSemesterPushButton,
                   @ui.addSpecialityPushButton, @ui.addSpecialitySubjectPushButton, @ui.addSubjectPushButton,
                   @ui.removeCabinetPushButton, @ui.removeCoursePushButton, @ui.removeGroupPushButton,
                   @ui.removeSubgroupPushButton, @ui.removeLecturerPushButton, @ui.removeSemesterPushButton,
                   @ui.removeSpecialityPushButton, @ui.removeSpecialitySubjectPushButton, @ui.removeSubjectPushButton]
  @widgets_to_disable = [@ui.findMenu, @ui.exportMenu, @ui.verifyMenu, @ui.saveAsAction, @ui.expandChangesAction]
  @tables_views_to_hide.each(&:hide)
  @widgets_to_disable.each{ |x| x.enabled = false }
  modeActionGroup = Qt::ActionGroup.new(self)
  modeActionGroup.setExclusive(true)
  modeActionGroup.addAction(@ui.weeklyViewAction)
  modeActionGroup.addAction(@ui.dailyViewAction)
  @temp = ->(){ "#{Dir.mktmpdir('tmis')}/temp.sqlite" }
  connect(@ui.aboutQtAction, SIGNAL('triggered()')){ Qt::Application.aboutQt }
  connect(@ui.aboutProgramAction, SIGNAL('triggered()')){ AboutDialog.new.exec }
  connect(@ui.exportGeneralAction, SIGNAL('triggered()')) do
    ExportGeneralTimetableDialog.new(Date.parse(@ui.dateDateEdit.date.toString(Qt::ISODate))).exec
  end
  connect(@ui.exportForLecturersAction, SIGNAL('triggered()')) do
    ExportLecturerTimetableDialog.new(Date.parse(@ui.dateDateEdit.date.toString(Qt::ISODate))).exec
  end
  connect(@ui.exportForGroupsAction, SIGNAL('triggered()')) do
    ExportGroupTimetableDialog.new(Date.parse(@ui.dateDateEdit.date.toString(Qt::ISODate))).exec
  end
  connect(@ui.settingsAction, SIGNAL('triggered()')){ SettingsDialog.new.exec }
  connect(@ui.expandChangesAction, SIGNAL('triggered()')){ ExpandChangesDialog.new(self).exec }
  @clear_recent_action = Qt::Action.new('Очистить', self)
  @clear_recent_action.setData Qt::Variant.new('clear')
  connect(@clear_recent_action, SIGNAL('triggered()'), self, SLOT('clear_recent_files()'))
  @ui.dateDateEdit.setDate(Qt::Date.fromString(Date.today.to_s, Qt::ISODate))
  setup_dateEdit(Date.today)
  @ui.recentMenu.clear
  @ui.recentMenu.addActions([@clear_recent_action] + Settings[:recent, :files].split.map{ |path| create_recent_action(path) })
  #Settings[:app, :first_run] = ''
  Settings.set_defaults_if_first_run
  @console = ConsoleDialog.new self
  connect(@console, SIGNAL('dialogClosed()')){ @study_table_models.each(&:cancelColoring) }
  $TARIFICATION_MODE = false
end

Public Instance Methods

clear_recent_files() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 793
def clear_recent_files
  @ui.recentMenu.clear
  @ui.recentMenu.addAction @clear_recent_action
end
create_recent_action(path) click to toggle source

Contract String => Qt::Action

# File lib/tmis/interface/mainwindow.rb, line 776
def create_recent_action(path)
  action = Qt::Action.new(path[path.size-10..path.size], self)
  connect(action, SIGNAL('triggered()'), self, SLOT('open_file()'))
  action.setData Qt::Variant.new(path); action
end
create_stubs() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 217
def create_stubs
  Lecturer.create(surname: Settings[:stubs, :lecturer], stub: true)
  Cabinet.create(title: Settings[:stubs, :cabinet], stub: true)
  Subject.create(title: Settings[:stubs, :subject], stub: true)
end
filterListViews(study64) click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 705
def filterListViews(study64)
  if study.subject

  end
  if study.lecturer

  end
end
on_addCabinetPushButton_clicked() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 827
def on_addCabinetPushButton_clicked
  @ui.cabinetsTableView.model.insert_new
end
on_addCoursePushButton_clicked() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 835
def on_addCoursePushButton_clicked
  @ui.coursesTableView.model.insert_new
end
on_addGroupPushButton_clicked() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 843
def on_addGroupPushButton_clicked
  @ui.groupsTableView.model.insert_new
end
on_addLecturerPushButton_clicked() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 851
def on_addLecturerPushButton_clicked
  @ui.lecturersTableView.model.insert_new
end
on_addSemesterPushButton_clicked() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 859
def on_addSemesterPushButton_clicked
  @ui.semestersTableView.model.insert_new
end
on_addSpecialityPushButton_clicked() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 875
def on_addSpecialityPushButton_clicked
  @ui.specialitiesTableView.model.insert_new
end
on_addSpecialitySubjectPushButton_clicked() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 867
def on_addSpecialitySubjectPushButton_clicked
  @ui.specialitySubjectsTableView.model.insert_new
end
on_addSubgroupPushButton_clicked() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 883
def on_addSubgroupPushButton_clicked
  @ui.subgroupsTableView.model.insert_new
end
on_addSubjectPushButton_clicked() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 891
def on_addSubjectPushButton_clicked
  @ui.subjectsTableView.model.insert_new
end
on_allAction_triggered() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 295
def on_allAction_triggered
  begin
    @console.browser.clear
    @console.show
    @console.browser.append verifyLecturers
    @console.browser.append verifyCabinets
    @console.browser.append showComputerCabinets
    @console.browser.append showLecturerStubs
    @console.browser.append showCabinetStubs
    @console.browser.append showSubjectsStubs
    @console.browser.append showPreferredDays
  rescue
    show_message "При проверке произошли ошибки.\nПроверьте таблицы данных и расписание"
  end
end
on_allCoincidenceAction_triggered() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 311
def on_allCoincidenceAction_triggered
  begin
    @console.browser.clear
    @console.show
    @console.browser.append verifyLecturers
    @console.browser.append verifyCabinets
  rescue
    show_message "При проверке произошли ошибки.\nПроверьте таблицы данных и расписание"
  end
end
on_allNotAssignedAction_triggered() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 322
def on_allNotAssignedAction_triggered
  begin
    @console.browser.clear
    @console.show
    @console.browser.append showLecturerStubs
    @console.browser.append showCabinetStubs
    @console.browser.append showSubjectsStubs
  rescue
    show_message "При проверке произошли ошибки.\nПроверьте таблицы данных и расписание"
  end
end
on_closeAction_triggered() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 281
def on_closeAction_triggered
  @tables_views_to_hide.each(&:hide)
  @widgets_to_disable.each{ |x| x.enabled = false }
  Database.instance.disconnect unless $TESTING
end
on_dataTabWidget_currentChanged(index) click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 899
def on_dataTabWidget_currentChanged(index)
  if Database.instance.connected?
    @table_views.each do |c, m, view|
      model = view.model
      model.refresh
      proxy_model = model
      view.model = proxy_model
    end
  end
end
on_dateDateEdit_dateChanged() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 798
def on_dateDateEdit_dateChanged
  setup_dateEdit(Date.parse(@ui.dateDateEdit.date.toString(Qt::ISODate)))
  setup_study_table_views if Database.instance.connected?
end
on_debugConsoleAction_triggered() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 931
def on_debugConsoleAction_triggered
  DebugConsoleDialog.new(self).show
end
on_findByCabinetAction_triggered() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 927
def on_findByCabinetAction_triggered
  FindDialog.new(:cabinet, self).show
end
on_findByLecturerAction_triggered() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 919
def on_findByLecturerAction_triggered
  FindDialog.new(:lecturer, self).show
end
on_findBySubjectAction_triggered() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 923
def on_findBySubjectAction_triggered
  FindDialog.new(:subject, self).show
end
on_importAction_triggered() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 245
def on_importAction_triggered
  please_wait do
    if (filename = Qt::FileDialog::getOpenFileName(self, 'Open File', Dir.home, 'Spreadsheets(*.xls *.xlsx *.ods *.csv)'))
      filename = filename.force_encoding('UTF-8')
      if Database.instance.connected?
        (id = ImportDialog.new(Date.parse(@ui.dateDateEdit.date.toString(Qt::ISODate)))).exec
      else
        (id = ImportDialog.new(Date.today)).exec
      end
      unless id.params.empty?
        begin
          sheet = SpreadsheetCreater.create filename
          reader = TimetableReader.new(sheet, id.params[:sheet])
          monday = Date.parse(@ui.dateDateEdit.date.toString(Qt::ISODate)).monday
          if Database.instance.connected?
            Database.instance.transaction do Study.where(date: (monday..(monday + 6))).each(&:delete) end
          else
            Database.instance.connect_to(@temp.())
            create_stubs
          end
          TimetableManager.new(reader, id.params[:date]).save_to_db
          show_tables
        rescue => e
          show_message "При импорте произошли ошибки,\nтаблица не была импортирована.\nПроверьте структуру таблицы."
        end
      end
    end
  end
end
on_newAction_triggered() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 210
def on_newAction_triggered
  Database.instance.connect_to(@temp.())
  create_stubs
  Group.create(title: 'New')
  show_tables
end
on_openAction_triggered() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 223
def on_openAction_triggered
  if (filename = Qt::FileDialog::getOpenFileName(self, 'Open File', Dir.home, 'TMIS databases (SQLite3)(*.sqlite)'))
    filename = filename.force_encoding("UTF-8")
    Database.instance.connect_to filename
    update_recent filename
    show_tables
  end
end
on_quitAction_triggered() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 287
def on_quitAction_triggered
  on_closeAction_triggered
  recent = @ui.recentMenu.actions
  Settings[:recent, :files] = recent[1..recent.size-1].map{ |a| a.data.value.to_s }.join(' ')
  puts 'Sayonara!'
  Qt::Application.quit
end
on_removeCabinetPushButton_clicked() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 831
def on_removeCabinetPushButton_clicked
  @ui.cabinetsTableView.model.remove_current
end
on_removeCoursePushButton_clicked() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 839
def on_removeCoursePushButton_clicked
  @ui.coursesTableView.model.remove_current
end
on_removeGroupPushButton_clicked() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 847
def on_removeGroupPushButton_clicked
  @ui.groupsTableView.model.remove_current
end
on_removeLecturerPushButton_clicked() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 855
def on_removeLecturerPushButton_clicked
  @ui.lecturersTableView.model.remove_current
end
on_removeSemesterPushButton_clicked() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 863
def on_removeSemesterPushButton_clicked
  @ui.semestersTableView.model.remove_current
end
on_removeSpecialityPushButton_clicked() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 879
def on_removeSpecialityPushButton_clicked
  @ui.specialitiesTableView.model.remove_current
end
on_removeSpecialitySubjectPushButton_clicked() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 871
def on_removeSpecialitySubjectPushButton_clicked
  @ui.specialitySubjectsTableView.model.remove_current
end
on_removeSubgroupPushButton_clicked() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 887
def on_removeSubgroupPushButton_clicked
  @ui.subgroupsTableView.model.remove_current
end
on_removeSubjectPushButton_clicked() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 895
def on_removeSubjectPushButton_clicked
  @ui.subjectsTableView.model.remove_current
end
on_saveAction_triggered() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 232
def on_saveAction_triggered
end
on_saveAsAction_triggered() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 235
def on_saveAsAction_triggered
  if (filename = Qt::FileDialog::getSaveFileName(self, 'Save File', "#{Dir.home}/NewTimetable.sqlite", 'TMIS databases (SQLite3)(*.sqlite)'))
    filename.force_encoding('UTF-8')
    FileUtils.cp(Database.instance.path, filename) unless Database.instance.path == filename
    Database.instance.connect_to filename
    update_recent filename
    show_tables
  end
end
on_showCabinetStubsAction_triggered() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 429
def on_showCabinetStubsAction_triggered
  begin
    @console.browser.clear
    @console.show
    @console.browser.append showCabinetStubs
  rescue
    show_message "При проверке произошли ошибки.\nПроверьте таблицы данных и расписание"
  end
end
on_showLecturerStubsAction_triggered() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 406
def on_showLecturerStubsAction_triggered
  begin
    @console.browser.clear
    @console.show
    @console.browser.append showLecturerStubs
  rescue
    show_message "При проверке произошли ошибки.\nПроверьте таблицы данных и расписание"
  end
end
on_showManualAction_triggered() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 814
def on_showManualAction_triggered
  # binding doesn't include QHelpEngine
  #helpEngine Qt::HelpEngineCore('test.qhc')
  #links = helpEngine.linksForIdentifier('MyDialog::ChangeButton')
  #if links.count
  #  helpData = helpEngine.fileData links.constBegin.value
  #  if !helpData.isEmpty
  #    displayHelp helpData
  #  end
  #end
  Qt::DesktopServices::openUrl(Qt::Url.new('https://github.com/Noein/TMIS/wiki'))
end
on_showSubjectsStubsAction_triggered() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 452
def on_showSubjectsStubsAction_triggered
  begin
    @console.browser.clear
    @console.show
    @console.browser.append showSubjectsStubs
  rescue
    show_message "При проверке произошли ошибки.\nПроверьте таблицы данных и расписание"
  end
end
on_tabWidget_currentChanged(index) click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 910
def on_tabWidget_currentChanged(index)
  if Database.instance.connected?
    if index == 0
      @study_table_models.each(&:refresh)
      [@ui.subjectsListView, @ui.lecturersListView, @ui.cabinetsListView].each{|view| view.model.refresh }
    end
  end
end
on_tarificationCheckBox_toggled(checked) click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 610
def on_tarificationCheckBox_toggled(checked)
  if checked
    $TARIFICATION_MODE = true
    model =  EntityItemModel.new(->(){ [] }, self)
    @ui.subjectsListView.setModel model
    @ui.subjectsListView.show
    model =  EntityItemModel.new(->(){ [] }, self)
    @ui.lecturersListView.setModel model
    @ui.lecturersListView.show
  else
    $TARIFICATION_MODE = false
    model =  EntityItemModel.new(->(){ Subject.all }, self)
    @ui.subjectsListView.setModel model
    @ui.subjectsListView.show
    model =  EntityItemModel.new(->(){ Lecturer.all }, self)
    @ui.lecturersListView.setModel model
    @ui.lecturersListView.show
  end
end
on_verifyCabinetsAction_triggered() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 383
def on_verifyCabinetsAction_triggered
  begin
    @console.browser.clear
    @console.show
    @console.browser.append verifyCabinets
  rescue
    show_message "При проверке произошли ошибки.\nПроверьте таблицы данных и расписание"
  end
end
on_verifyComputerCabinetsAction_triggered() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 475
def on_verifyComputerCabinetsAction_triggered
  begin
    @console.browser.clear
    @console.show
    @console.browser.append showComputerCabinets
  rescue
    show_message "При проверке произошли ошибки.\nПроверьте таблицы данных и расписание"
  end
end
on_verifyLecturersAction_triggered() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 355
def on_verifyLecturersAction_triggered
  begin
    @console.browser.clear
    @console.show
    @console.browser.append verifyLecturers
  rescue
    show_message "При проверке произошли ошибки.\nПроверьте таблицы данных и расписание"
  end
end
on_verifyPreferredDaysAction_triggered() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 498
def on_verifyPreferredDaysAction_triggered
  begin
    @console.browser.clear
    @console.show
    @console.browser.append showPreferredDays
  rescue
    show_message "При проверке произошли ошибки.\nПроверьте таблицы данных и расписание"
  end
end
open_file() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 766
def open_file
  filename = sender.data.value.to_s
  if File.exist? filename
    Database.instance.connect_to filename
    update_recent filename
    show_tables
  end
end
please_wait() { |block| ... } click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 808
def please_wait(&block)
  @ui.statusbar.showMessage 'Please, wait...'
  yield block
  @ui.statusbar.clearMessage
end
refreshTableViewModel(date_variant) click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 737
def refreshTableViewModel(date_variant)
  @study_table_models[date_variant.value.dayOfWeek - 1].refresh
end
setupListViews(index) click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 630
def setupListViews(index)
  return false unless $TARIFICATION_MODE
  string = index.model.data(index, Qt::UserRole).toString
  if string.nil? || string.empty?
    model =  EntityItemModel.new(->(){ [] }, self)
    @ui.subjectsListView.setModel model
    @ui.subjectsListView.show
    model =  EntityItemModel.new(->(){ [] }, self)
    @ui.lecturersListView.setModel model
    @ui.lecturersListView.show
  else
    entity = Marshal.load(Base64.decode64(string))
    p entity
    if entity.class == Study
      group = entity.groupable.get_group
      course = group.course
      if course.nil?
        model =  EntityItemModel.new(->(){ [] }, self)
        @ui.subjectsListView.setModel model
        @ui.subjectsListView.show
        model =  EntityItemModel.new(->(){ [] }, self)
        @ui.lecturersListView.setModel model
        @ui.lecturersListView.show
      else
        semester = course.current_semester
        get_subjects = ->() do
          if entity.lecturer && entity.subject.stub
            SpecialitySubject.where(lecturer_id: entity.lecturer, speciality_id: group.speciality, semester_id: semester).map(&:subject)
          else
            SpecialitySubject.where(speciality_id: group.speciality, semester_id: semester).map(&:subject)
          end
        end
        get_lecturers = ->() do
          if entity.subject && entity.lecturer.stub
            SpecialitySubject.where(subject_id: entity.subject, speciality_id: group.speciality, semester_id: semester).map(&:lecturer)
          else
            SpecialitySubject.where(speciality_id: group.speciality, semester_id: semester).map(&:lecturer)
          end
        end
        model =  EntityItemModel.new(get_subjects, self)
        @ui.subjectsListView.setModel model
        @ui.subjectsListView.show
        model =  EntityItemModel.new(get_lecturers, self)
        @ui.lecturersListView.setModel model
        @ui.lecturersListView.show
      end
    elsif entity.class == Group
      group = entity
      course = group.course
      if course.nil?
        model =  EntityItemModel.new(->(){ [] }, self)
        @ui.subjectsListView.setModel model
        @ui.subjectsListView.show
        model =  EntityItemModel.new(->(){ [] }, self)
        @ui.lecturersListView.setModel model
        @ui.lecturersListView.show
      else
        semester = course.current_semester
        get_subjects = ->() do
          SpecialitySubject.where(speciality_id: group.speciality, semester_id: semester).map(&:subject)
        end
        get_lecturers = ->() do
          SpecialitySubject.where(speciality_id: group.speciality, semester_id: semester).map(&:lecturer)
        end
        model =  EntityItemModel.new(get_subjects, self)
        @ui.subjectsListView.setModel model
        @ui.subjectsListView.show
        model =  EntityItemModel.new(get_lecturers, self)
        @ui.lecturersListView.setModel model
        @ui.lecturersListView.show
      end
    end
  end
end
setup_dateEdit(date) click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 803
def setup_dateEdit(date)
  type = date.cweek.even? ? "Чётная" : "Нечётная"
  @ui.dateDateEdit.displayFormat = "Неделя №#{date.cweek} (#{type}) dddd - d MMMM yy"
end
setup_study_table_view(view, date) click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 741
def setup_study_table_view(view, date)
  model = StudyTableModel.new(date, view)
  view = setup_table_view2(view, model, Qt::HeaderView::Interactive)
  model.columnCount.times{ |i| i.odd? ? view.setColumnWidth(i, 50) : view.setColumnWidth(i, 150) }
  model.rowCount.times{ |i| view.setRowHeight(i, 50) }
  model
end
setup_study_table_views() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 714
def setup_study_table_views
  @ui.deleteAction.disconnect(SIGNAL('triggered()'))
  monday = Date.parse(@ui.dateDateEdit.date.toString(Qt::ISODate)).monday
  @study_table_models = @study_table_views.each_with_index.map do |view, index|
    model = setup_study_table_view(view, monday + index)
    model.disconnect(SIGNAL('studySaved(QVariant)'))
    view.disconnect(SIGNAL('doubleClicked(QModelIndex)'))
    view.disconnect(SIGNAL('customContextMenuRequested(QPoint)'))
    view.disconnect(SIGNAL('clicked(QModelIndex)'))
    model.disconnect(SIGNAL('refreshTarification(QModelIndex)'))
    connect(view, SIGNAL('customContextMenuRequested(QPoint)'), model, SLOT('displayMenu(QPoint)'))
    connect(view, SIGNAL('clicked(QModelIndex)')){ |index| setupListViews(index) }
    connect(model, SIGNAL('refreshTarification(QModelIndex)')){ |index| setupListViews(index) }
    connect(view, SIGNAL('doubleClicked(QModelIndex)'), model, SLOT('editStudy(QModelIndex)'))
    #connect(model, SIGNAL('studySaved(QString)')){|study64| filterListViews(study64) }
    connect(model, SIGNAL('studySaved(QVariant)'), self, SLOT('refreshTableViewModel(QVariant)'))
    connect(@ui.deleteAction, SIGNAL('triggered()'), model, SLOT('removeData()'))
    connect(@ui.cancelVerifyingAction, SIGNAL('triggered()'), model, SLOT('cancelColoring()'))
    view.setContextMenuPolicy(Qt::CustomContextMenu)
    model
  end
end
setup_table_view(table_view, table_model, resize_mode) click to toggle source

Contract IsA, IsA, IsA => IsA

# File lib/tmis/interface/mainwindow.rb, line 758
def setup_table_view(table_view, table_model, resize_mode)
  table_view.setModel(table_model)
  table_view.horizontalHeader.setResizeMode(resize_mode)
  table_view.verticalHeader.setResizeMode(Qt::HeaderView::ResizeToContents)
  table_view.show
  table_view
end
setup_table_view2(table_view, table_model, resize_mode) click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 749
def setup_table_view2(table_view, table_model, resize_mode)
  table_view.setModel(table_model)
  table_view.horizontalHeader.setResizeMode(resize_mode)
  table_view.verticalHeader.setResizeMode(resize_mode)
  table_view.show
  table_view
end
showCabinetStubs() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 416
def showCabinetStubs
  date = Date.parse(@ui.dateDateEdit.date.toString(Qt::ISODate))
  dates = date.monday..date.monday + 6
  v = Verificator.new(dates)
  res = v.verify(:cabinet_stubs).map do |date, studies|
    studies.map do |study|
      @study_table_models[date.cwday - 1].setColorCabinet(study.id, Qt::green)
      "#{date} | Не назначен кабинет! Группа: #{study.get_group.title} Номер пары: #{study.number}"
    end.join("\n")
  end
  res = res.compact.join("\n")
end
showComputerCabinets() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 462
def showComputerCabinets
  date = Date.parse(@ui.dateDateEdit.date.toString(Qt::ISODate))
  dates = date.monday..date.monday + 6
  v = Verificator.new(dates)
  res = v.verify(:computer_cabinets).map do |date, studies|
    studies.map do |study|
      @study_table_models[date.cwday - 1].setColorCabinet(study.id, Qt::yellow)
      "#{date} | Занятие подгруппы проходит не в компьютерном кабинете! Группа: #{study.get_group.title} Номер пары: #{study.number}"
    end.join("\n")
  end
  res = res.compact.join("\n")
end
showLecturerStubs() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 393
def showLecturerStubs
  date = Date.parse(@ui.dateDateEdit.date.toString(Qt::ISODate))
  dates = date.monday..date.monday + 6
  v = Verificator.new(dates)
  res = v.verify(:lecturer_stubs).map do |date, studies|
    studies.map do |study|
      @study_table_models[date.cwday - 1].setColor(study.id, Qt::green)
      "#{date} | Не назначен преподаватель! Группа: #{study.get_group.title} Номер пары: #{study.number}"
    end.join("\n")
  end
  res = res.compact.join("\n")
end
showPreferredDays() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 485
def showPreferredDays
  date = Date.parse(@ui.dateDateEdit.date.toString(Qt::ISODate))
  dates = date.monday..date.monday + 6
  v = Verificator.new(dates)
  res = v.verify(:preferred_days).map do |date, studies|
    studies.map do |study|
      @study_table_models[date.cwday - 1].setColorCabinet(study.id, Qt::yellow)
      "#{date} | #{study.lecturer.to_s} предпочитает вести занятия в другой день! Группа: #{study.get_group.title} Номер пары: #{study.number}"
    end.join("\n")
  end
  res = res.compact.join("\n")
end
showSubjectsStubs() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 439
def showSubjectsStubs
  date = Date.parse(@ui.dateDateEdit.date.toString(Qt::ISODate))
  dates = date.monday..date.monday + 6
  v = Verificator.new(dates)
  res = v.verify(:subject_stubs).map do |date, studies|
    studies.map do |study|
      @study_table_models[date.cwday - 1].setColor(study.id, Qt::green)
      "#{date} | Не назначен предмет! Группа: #{study.get_group.title} Номер пары: #{study.number}"
    end.join("\n")
  end
  res = res.compact.join("\n")
end
show_message(text) click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 275
def show_message(text)
  box = Qt::MessageBox.new
  box.setText text
  box.exec
end
show_tables() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 587
def show_tables
  @table_models = @table_views.map do |entity, table_model, table_view|
    model = table_model.new(entity.all, table_view)
    proxy_model = model
    setup_table_view(table_view, proxy_model, Qt::HeaderView::Stretch)
    model
  end
  setup_study_table_views
  @ui.dateDateEdit.show
  @tables_views_to_hide.each(&:show)
  @widgets_to_disable.each{ |x| x.enabled = true }
  #@ui.studiesTableView.setSpan(0, 0, 1, 3)
  model =  EntityItemModel.new(->(){ Subject.all }, self)
  @ui.subjectsListView.setModel model
  @ui.subjectsListView.show
  model =  EntityItemModel.new(->(){ Lecturer.all }, self)
  @ui.lecturersListView.setModel model
  @ui.lecturersListView.show
  model =  EntityItemModel.new(->(){ Cabinet.all }, self)
  @ui.cabinetsListView.setModel model
  @ui.cabinetsListView.show
end
update_recent(filename) click to toggle source

Contract String => Any

# File lib/tmis/interface/mainwindow.rb, line 783
def update_recent(filename)
  actions = @ui.recentMenu.actions
  if actions.size > 5
    @ui.recentMenu.clear
    @ui.recentMenu.addActions([@clear_recent_action] + actions[1..actions.size-1])
  else
    @ui.recentMenu.addAction create_recent_action(filename)
  end
end
verifyCabinets() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 365
def verifyCabinets
  date = Date.parse(@ui.dateDateEdit.date.toString(Qt::ISODate))
  dates = date.monday..date.monday + 6
  v = Verificator.new(dates)
  res = v.verify(:cabinet_studies).map do |k, v|
    date = k[0]
    cabinet= Cabinet.where(id: k[1]).first
    number = k[2]
    if cabinet.stub
      nil
    else
      v.each{ |study| @study_table_models[date.cwday - 1].setColorCabinet(study.id, Qt::blue) }
      "#{date} | В #{cabinet.title} проходит несколько пар одновременно! Номер пары: #{number}"
    end
  end
  res = res.compact.join("\n")
end
verifyLecturers() click to toggle source
# File lib/tmis/interface/mainwindow.rb, line 334
def verifyLecturers
  date = Date.parse(@ui.dateDateEdit.date.toString(Qt::ISODate))
  dates = date.monday..date.monday + 6
  v = Verificator.new(dates)
  res = v.verify(:lecturer_studies).map do |k, v|
    date = k[0]
    lecturer = Lecturer.where(id: k[1]).first
    number = k[2]
    if lecturer.stub
      nil
    else
      v.each do |study|
        tst = @study_table_models[date.cwday - 1]
        tst.setColor(study.id, Qt::red)
      end
      "#{date} | #{lecturer} ведёт несколько пар одновременно! Номер пары: #{number}"
    end
  end
  res = res.compact.join("\n")
end