Class: MainWindow

Inherits:
Qt::MainWindow
  • Object
show all
Defined in:
lib/tmis/interface/mainwindow.rb

Defined Under Namespace

Classes: EntityItemModel

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(parent = nil) ⇒ MainWindow

Returns a new instance of MainWindow.



149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
# 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

Instance Attribute Details

#study_table_modelsObject (readonly)

Returns the value of attribute study_table_models.



147
148
149
# File 'lib/tmis/interface/mainwindow.rb', line 147

def study_table_models
  @study_table_models
end

#uiObject (readonly)

Returns the value of attribute ui.



146
147
148
# File 'lib/tmis/interface/mainwindow.rb', line 146

def ui
  @ui
end

Instance Method Details

#clear_recent_filesObject



791
792
793
794
# File 'lib/tmis/interface/mainwindow.rb', line 791

def clear_recent_files
  @ui.recentMenu.clear
  @ui.recentMenu.addAction @clear_recent_action
end

#create_recent_action(path) ⇒ Object

Contract String => Qt::Action



774
775
776
777
778
# File 'lib/tmis/interface/mainwindow.rb', line 774

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_stubsObject



217
218
219
220
221
# 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) ⇒ Object



703
704
705
706
707
708
709
710
# File 'lib/tmis/interface/mainwindow.rb', line 703

def filterListViews(study64)
  if study.subject

  end
  if study.lecturer

  end
end

#on_addCabinetPushButton_clickedObject



825
826
827
# File 'lib/tmis/interface/mainwindow.rb', line 825

def on_addCabinetPushButton_clicked
  @ui.cabinetsTableView.model.insert_new
end

#on_addCoursePushButton_clickedObject



833
834
835
# File 'lib/tmis/interface/mainwindow.rb', line 833

def on_addCoursePushButton_clicked
  @ui.coursesTableView.model.insert_new
end

#on_addGroupPushButton_clickedObject



841
842
843
# File 'lib/tmis/interface/mainwindow.rb', line 841

def on_addGroupPushButton_clicked
  @ui.groupsTableView.model.insert_new
end

#on_addLecturerPushButton_clickedObject



849
850
851
# File 'lib/tmis/interface/mainwindow.rb', line 849

def on_addLecturerPushButton_clicked
  @ui.lecturersTableView.model.insert_new
end

#on_addSemesterPushButton_clickedObject



857
858
859
# File 'lib/tmis/interface/mainwindow.rb', line 857

def on_addSemesterPushButton_clicked
  @ui.semestersTableView.model.insert_new
end

#on_addSpecialityPushButton_clickedObject



873
874
875
# File 'lib/tmis/interface/mainwindow.rb', line 873

def on_addSpecialityPushButton_clicked
  @ui.specialitiesTableView.model.insert_new
end

#on_addSpecialitySubjectPushButton_clickedObject



865
866
867
# File 'lib/tmis/interface/mainwindow.rb', line 865

def on_addSpecialitySubjectPushButton_clicked
  @ui.specialitySubjectsTableView.model.insert_new
end

#on_addSubgroupPushButton_clickedObject



881
882
883
# File 'lib/tmis/interface/mainwindow.rb', line 881

def on_addSubgroupPushButton_clicked
  @ui.subgroupsTableView.model.insert_new
end

#on_addSubjectPushButton_clickedObject



889
890
891
# File 'lib/tmis/interface/mainwindow.rb', line 889

def on_addSubjectPushButton_clicked
  @ui.subjectsTableView.model.insert_new
end

#on_allAction_triggeredObject



293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
# File 'lib/tmis/interface/mainwindow.rb', line 293

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_triggeredObject



309
310
311
312
313
314
315
316
317
318
# File 'lib/tmis/interface/mainwindow.rb', line 309

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_triggeredObject



320
321
322
323
324
325
326
327
328
329
330
# File 'lib/tmis/interface/mainwindow.rb', line 320

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_triggeredObject



279
280
281
282
283
# File 'lib/tmis/interface/mainwindow.rb', line 279

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) ⇒ Object



897
898
899
900
901
902
903
904
905
906
# File 'lib/tmis/interface/mainwindow.rb', line 897

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_dateChangedObject



796
797
798
799
# File 'lib/tmis/interface/mainwindow.rb', line 796

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_triggeredObject



929
930
931
# File 'lib/tmis/interface/mainwindow.rb', line 929

def on_debugConsoleAction_triggered
  DebugConsoleDialog.new(self).show
end

#on_findByCabinetAction_triggeredObject



925
926
927
# File 'lib/tmis/interface/mainwindow.rb', line 925

def on_findByCabinetAction_triggered
  FindDialog.new(:cabinet, self).show
end

#on_findByLecturerAction_triggeredObject



917
918
919
# File 'lib/tmis/interface/mainwindow.rb', line 917

def on_findByLecturerAction_triggered
  FindDialog.new(:lecturer, self).show
end

#on_findBySubjectAction_triggeredObject



921
922
923
# File 'lib/tmis/interface/mainwindow.rb', line 921

def on_findBySubjectAction_triggered
  FindDialog.new(:subject, self).show
end

#on_importAction_triggeredObject



244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
# File 'lib/tmis/interface/mainwindow.rb', line 244

def on_importAction_triggered
  please_wait do
    if (filename = Qt::FileDialog::getOpenFileName(self, 'Open File', '', 'Spreadsheets(*.xls *.xlsx *.ods *.csv)'))
      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_triggeredObject



210
211
212
213
214
215
# 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_triggeredObject



223
224
225
226
227
228
229
# File 'lib/tmis/interface/mainwindow.rb', line 223

def on_openAction_triggered
  if (filename = Qt::FileDialog::getOpenFileName(self, 'Open File', '', 'TMIS databases (SQLite3)(*.sqlite)'))
    Database.instance.connect_to filename
    update_recent filename
    show_tables
  end
end

#on_quitAction_triggeredObject



285
286
287
288
289
290
291
# File 'lib/tmis/interface/mainwindow.rb', line 285

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_clickedObject



829
830
831
# File 'lib/tmis/interface/mainwindow.rb', line 829

def on_removeCabinetPushButton_clicked
  @ui.cabinetsTableView.model.remove_current
end

#on_removeCoursePushButton_clickedObject



837
838
839
# File 'lib/tmis/interface/mainwindow.rb', line 837

def on_removeCoursePushButton_clicked
  @ui.coursesTableView.model.remove_current
end

#on_removeGroupPushButton_clickedObject



845
846
847
# File 'lib/tmis/interface/mainwindow.rb', line 845

def on_removeGroupPushButton_clicked
  @ui.groupsTableView.model.remove_current
end

#on_removeLecturerPushButton_clickedObject



853
854
855
# File 'lib/tmis/interface/mainwindow.rb', line 853

def on_removeLecturerPushButton_clicked
  @ui.lecturersTableView.model.remove_current
end

#on_removeSemesterPushButton_clickedObject



861
862
863
# File 'lib/tmis/interface/mainwindow.rb', line 861

def on_removeSemesterPushButton_clicked
  @ui.semestersTableView.model.remove_current
end

#on_removeSpecialityPushButton_clickedObject



877
878
879
# File 'lib/tmis/interface/mainwindow.rb', line 877

def on_removeSpecialityPushButton_clicked
  @ui.specialitiesTableView.model.remove_current
end

#on_removeSpecialitySubjectPushButton_clickedObject



869
870
871
# File 'lib/tmis/interface/mainwindow.rb', line 869

def on_removeSpecialitySubjectPushButton_clicked
  @ui.specialitySubjectsTableView.model.remove_current
end

#on_removeSubgroupPushButton_clickedObject



885
886
887
# File 'lib/tmis/interface/mainwindow.rb', line 885

def on_removeSubgroupPushButton_clicked
  @ui.subgroupsTableView.model.remove_current
end

#on_removeSubjectPushButton_clickedObject



893
894
895
# File 'lib/tmis/interface/mainwindow.rb', line 893

def on_removeSubjectPushButton_clicked
  @ui.subjectsTableView.model.remove_current
end

#on_saveAction_triggeredObject



231
232
# File 'lib/tmis/interface/mainwindow.rb', line 231

def on_saveAction_triggered
end

#on_saveAsAction_triggeredObject



234
235
236
237
238
239
240
241
242
# File 'lib/tmis/interface/mainwindow.rb', line 234

def on_saveAsAction_triggered
  if (filename = Qt::FileDialog::getSaveFileName(self, 'Save File', '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_triggeredObject



427
428
429
430
431
432
433
434
435
# File 'lib/tmis/interface/mainwindow.rb', line 427

def on_showCabinetStubsAction_triggered
  begin
    @console.browser.clear
    @console.show
    @console.browser.append showCabinetStubs
  rescue
    show_message "При проверке произошли ошибки.\nПроверьте таблицы данных и расписание"
  end
end

#on_showLecturerStubsAction_triggeredObject



404
405
406
407
408
409
410
411
412
# File 'lib/tmis/interface/mainwindow.rb', line 404

def on_showLecturerStubsAction_triggered
  begin
    @console.browser.clear
    @console.show
    @console.browser.append showLecturerStubs
  rescue
    show_message "При проверке произошли ошибки.\nПроверьте таблицы данных и расписание"
  end
end

#on_showManualAction_triggeredObject



812
813
814
815
816
817
818
819
820
821
822
823
# File 'lib/tmis/interface/mainwindow.rb', line 812

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_triggeredObject



450
451
452
453
454
455
456
457
458
# File 'lib/tmis/interface/mainwindow.rb', line 450

def on_showSubjectsStubsAction_triggered
  begin
    @console.browser.clear
    @console.show
    @console.browser.append showSubjectsStubs
  rescue
    show_message "При проверке произошли ошибки.\nПроверьте таблицы данных и расписание"
  end
end

#on_tabWidget_currentChanged(index) ⇒ Object



908
909
910
911
912
913
914
915
# File 'lib/tmis/interface/mainwindow.rb', line 908

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) ⇒ Object



608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
# File 'lib/tmis/interface/mainwindow.rb', line 608

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_triggeredObject



381
382
383
384
385
386
387
388
389
# File 'lib/tmis/interface/mainwindow.rb', line 381

def on_verifyCabinetsAction_triggered
  begin
    @console.browser.clear
    @console.show
    @console.browser.append verifyCabinets
  rescue
    show_message "При проверке произошли ошибки.\nПроверьте таблицы данных и расписание"
  end
end

#on_verifyComputerCabinetsAction_triggeredObject



473
474
475
476
477
478
479
480
481
# File 'lib/tmis/interface/mainwindow.rb', line 473

def on_verifyComputerCabinetsAction_triggered
  begin
    @console.browser.clear
    @console.show
    @console.browser.append showComputerCabinets
  rescue
    show_message "При проверке произошли ошибки.\nПроверьте таблицы данных и расписание"
  end
end

#on_verifyLecturersAction_triggeredObject



353
354
355
356
357
358
359
360
361
# File 'lib/tmis/interface/mainwindow.rb', line 353

def on_verifyLecturersAction_triggered
  begin
    @console.browser.clear
    @console.show
    @console.browser.append verifyLecturers
  rescue
    show_message "При проверке произошли ошибки.\nПроверьте таблицы данных и расписание"
  end
end

#on_verifyPreferredDaysAction_triggeredObject



496
497
498
499
500
501
502
503
504
# File 'lib/tmis/interface/mainwindow.rb', line 496

def on_verifyPreferredDaysAction_triggered
  begin
    @console.browser.clear
    @console.show
    @console.browser.append showPreferredDays
  rescue
    show_message "При проверке произошли ошибки.\nПроверьте таблицы данных и расписание"
  end
end

#open_fileObject



764
765
766
767
768
769
770
771
# File 'lib/tmis/interface/mainwindow.rb', line 764

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| ... } ⇒ Object

Yields:

  • (block)


806
807
808
809
810
# File 'lib/tmis/interface/mainwindow.rb', line 806

def please_wait(&block)
  @ui.statusbar.showMessage 'Please, wait...'
  yield block
  @ui.statusbar.clearMessage
end

#refreshTableViewModel(date_variant) ⇒ Object



735
736
737
# File 'lib/tmis/interface/mainwindow.rb', line 735

def refreshTableViewModel(date_variant)
  @study_table_models[date_variant.value.dayOfWeek - 1].refresh
end

#setup_dateEdit(date) ⇒ Object



801
802
803
804
# File 'lib/tmis/interface/mainwindow.rb', line 801

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) ⇒ Object



739
740
741
742
743
744
745
# File 'lib/tmis/interface/mainwindow.rb', line 739

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_viewsObject



712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
# File 'lib/tmis/interface/mainwindow.rb', line 712

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) ⇒ Object

Contract IsA, IsA, IsA => IsA



756
757
758
759
760
761
762
# File 'lib/tmis/interface/mainwindow.rb', line 756

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) ⇒ Object



747
748
749
750
751
752
753
# File 'lib/tmis/interface/mainwindow.rb', line 747

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

#setupListViews(index) ⇒ Object



628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
# File 'lib/tmis/interface/mainwindow.rb', line 628

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

#show_message(text) ⇒ Object



273
274
275
276
277
# File 'lib/tmis/interface/mainwindow.rb', line 273

def show_message(text)
  box = Qt::MessageBox.new
  box.setText text
  box.exec
end

#show_tablesObject



585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
# File 'lib/tmis/interface/mainwindow.rb', line 585

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

#showCabinetStubsObject



414
415
416
417
418
419
420
421
422
423
424
425
# File 'lib/tmis/interface/mainwindow.rb', line 414

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

#showComputerCabinetsObject



460
461
462
463
464
465
466
467
468
469
470
471
# File 'lib/tmis/interface/mainwindow.rb', line 460

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

#showLecturerStubsObject



391
392
393
394
395
396
397
398
399
400
401
402
# File 'lib/tmis/interface/mainwindow.rb', line 391

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

#showPreferredDaysObject



483
484
485
486
487
488
489
490
491
492
493
494
# File 'lib/tmis/interface/mainwindow.rb', line 483

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

#showSubjectsStubsObject



437
438
439
440
441
442
443
444
445
446
447
448
# File 'lib/tmis/interface/mainwindow.rb', line 437

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

#update_recent(filename) ⇒ Object

Contract String => Any



781
782
783
784
785
786
787
788
789
# File 'lib/tmis/interface/mainwindow.rb', line 781

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

#verifyCabinetsObject



363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
# File 'lib/tmis/interface/mainwindow.rb', line 363

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

#verifyLecturersObject



332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
# File 'lib/tmis/interface/mainwindow.rb', line 332

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